我最近将我的Rails 4应用程序从RSpec 2.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,: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,:amount => 99.99) }.to_not change { @invoice.reload.open? } end
那不会测试@ invoice.reload.open?的初始值,但是你应该对它进行单独的测试.您不需要在此测试中再次测试它.
尽管如此,在RSpec 3中,您可以单独使用.from来测试未更改的值是否具有给定的初始值:
it "is open" do expect { FactoryGirl.create(:payment,:amount => 99.99) }.to_not change { @invoice.reload.open? }.from(false) end
在RSpec 2中你不能这样做; .to_not change {}.from如果传递给.from的值不是预期的值.在RSpec 2.99中引发警告.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。