如何修复2.99版本的RSpec语法



我最近从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中,

相关内容

  • 没有找到相关文章

最新更新