在我的系統中,我有一個擁有多個帳戶的公司的用戶。
用戶使用Devise登錄系統,並具有在CompaniesController中設置的名爲selected_company的虛擬屬性。
我想在這種情況下在AccountsController中進行多個測試。
我有這樣的代碼來sign_in用戶,此代碼工作得很好:如何使用步驟測試控制器以使用某些操作
before :each do
@user = create(:user)
@user.confirm!
sign_in @user
end
但我必須有,我試圖編寫的特定背景:
context 'when user already selected a company' do
before :each do
@company = create(:company)
@account = create(:account)
@company.accounts << @account
@user.selected_company = @company
end
it "GET #index must assings @accounts with selected_company.accounts" do
get :index
expect(assigns(accounts)).to match_array [@account]
end
end
但這種代碼不會工作中,當我運行它,我得到這個錯誤:
undefined method `accounts' for nil:NilClass
我AccountsController#指數只有這樣的代碼:
def index
@accounts = current_user.selected_company.accounts
end
我是rspec和TDD的新成員,我有一些時間來測試我想要的一切,並且我想測試一切以實踐rspec。
我不知道這是測試這件事情的最好方法,所以我願意提供建議。
對不起,我輸入'@ accounts'而不是'@ account'。在我的代碼中,我使用了@account,它在before(:each)語句中聲明。 – squiter 2013-04-29 17:25:28
是的,我推斷出這一點。但必須通知你,以防你實際上是'@ accounts'。 :) – kiddorails 2013-04-29 17:26:44