我最近从RSpec 2升级了Rails 4应用程序。X到2.99,尽管已经运行了Transpec,我的一些测试仍然失败。
require 'spec_helper'
describe Invoice, :type => :model do
before :each do
@user = FactoryGirl.create(:user)
@invoice = FactoryGirl.create(:invoice, :user => @user)
end
it "is not open" do
expect {
FactoryGirl.create(:payment, :invoice => @invoice, :amount => 100)
}.to change{@invoice.reload.open?}.from(true).to(false)
end
it "is open" do
expect {
FactoryGirl.create(:payment, :invoice => @invoice, :amount => 99.99)
}.to_not change{@invoice.reload.open?}.to(false)
end
end
第一个测试通过了,就像RSpec升级之前一样。
然而,第二个测试抛出了一个错误:Failure/Error: expect {
`expect { }.not_to change { }.to()` is deprecated.
我必须将语法更改为什么?
我已经尝试了一些事情,如not_to
, be_falsey
等。
谢谢你的帮助
不要断言值不会改变,只断言它不会改变:
it "is open" do
expect {
FactoryGirl.create(:payment, :invoice => @invoice, :amount => 99.99)
}.to_not change { @invoice.reload.open? }
end
这不会测试@invoice.reload.open?
的初始值,但无论如何,您应该对此进行单独的测试。你不需要在这个测试中再测试一次。
尽管如此,在RSpec 3中,您可以单独使用.from
来测试不改变的值是否具有给定的初始值:
it "is open" do
expect {
FactoryGirl.create(:payment, :invoice => @invoice, :amount => 99.99)
}.to_not change { @invoice.reload.open? }.from(false)
end
在RSpec 2中还不能这样做;如果传递给.from
的值不是期望的值,则.to_not change {}.from
通过。在RSpec 2.99中,