私のシステムでは、複数のアカウントを持つ 1 つの会社を持つユーザーがいます。
ユーザーは Devise を使用してシステムにサインインし、CompanysController で設定された 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 を実践するためにすべてをテストしたいと考えています。
これがこのことをテストする最良の方法であるかどうかはわかりませんので、提案をお待ちしています。