预期#count已经改变了1,但没有给出阻止

Und*_*ker 14 ruby rspec ruby-on-rails ruby-on-rails-3

我正在测试我的model方法,它返回给我一个Account object.我正在检查我的表是否插入了一个新的row,我的模型反映了它的计数.

以下是我的规格.

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

我得到的错误

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
Run Code Online (Sandbox Code Playgroud)

Thi*_*ilo 48

#change匹配预计其中的一些动作执行块效应的预期变化.试试这个:

expect { Account.create(account: acc) }.to change{ Account.count }.by(1)
Run Code Online (Sandbox Code Playgroud)

请参阅https://www.relishapp.com/rspec/rspec-expectations/v/2-0/docs/matchers/expect-change

  • `expect {Account.create(account:acc)}.更改{Account.all.size} .by(1)` (3认同)
  • `expect { Account.create(account: acc) }.to change(Account, :count).by(1)` - 这也有效并且将避免 rubocop 抱怨编码风格。 (3认同)

Dor*_*ian 8

当您使用is_expected.to change { something }而不是时会发生expect { subject }.to change { something }