为什么测试的奇怪行为?

时间:2015-06-01 13:57:05

标签: ruby-on-rails rspec

我尝试对我的应用进行单元测试,然后我写了

    it 'with checkbox' do
      @order = FactoryGirl.create(:order)
      expect{ @order }.to change{ Client.count }.by(1)
    end

和shell显示错误

   expected result to have changed by 1, but was changed by 0

但为什么呢?我通过pry绑定了规范并制作了这个: 在@order = FactoryGirl.create(:order)之前我打电话

[1] pry(#<RSpec::ExampleGroups::Order::CreateAValidOrder>)> Client.count
=> 0
@order = FactoryGirl.create(:order)致电后

[1] pry(#<RSpec::ExampleGroups::Order::CreateAValidOrder>)> Client.count
=> 1

它有效,但为什么rspec会给我一个错误?我不明白

抱歉我的英文不好

2 个答案:

答案 0 :(得分:2)

我认为@order = FactoryGirl.create(:order)正在expect命令之前执行。请尝试以下代码:

it 'with checkbox' do
    expect{ FactoryGirl.create(:order) }.to change{ Client.count }.by(1)
end

答案 1 :(得分:1)

在数据库中创建记录后设置@order。所以,事实上,它的价值并没有改变。

你最好朝着这个方向前进:

期待{FactoryGirl.create(:order)}。更改(订单,:计数).by(1)