web-dev-qa-db-ja.com

#countが1変化すると予想されましたが、ブロックは与えられませんでした

Account objectを返すmodelメソッドをテストしています。テーブルに新しいrowが挿入され、モデルにその数が反映されているかどうかを確認しています。

以下は私の仕様です。

 it "can create an account" do    
    create_account = Account.create(account: acc) 
    create_account.should change(Account, :count).by(1);
 end

エラーが発生しています

8) Account can create an account
     Failure/Error: create_account.should change(Account, :count).by(1);
       expected #count to have changed by 1, but was not given a block
14
UnderTaker

#change matcherは、予想される変更に影響を与える何らかのアクションが実行されるブロックを想定しています。これを試して:

expect { Account.create(account: acc) }.to change{ Account.count }.by(1)

https://www.relishapp.com/rspec/rspec-expectations/v/2-0/docs/matchers/expect-change を参照してください

50
Thilo