在我的系统中,我有一个用户拥有一家公司,该公司拥有多个帐户。
用户使用 Devise 登录系统,并在 CompaniesController 中设置了一个名为 selected_company 的虚拟属性。
我想在这种情况下在 AccountsController 中进行多个测试。
我有这个代码来登录用户,这个代码运行良好:
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#index 只有这个代码:
def index
@accounts = current_user.selected_company.accounts
end
我是 rspec 和 TDD 的新手,我有时间测试我想要的所有东西,我想测试所有东西来练习 rspec。
我不知道这是否是测试这些东西的最佳方法,所以我愿意接受建议。