#ruby-on-rails #ruby #rspec #rspec-rails #rspec3
#ruby-on-rails #ruby #rspec #rspec-rails #rspec3
Вопрос:
Недавно я обновил свое приложение 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, :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
например, и т.д. Пока ничего не получалось.
Спасибо за любую помощь.
Ответ №1:
Не утверждайте, что значение не меняется на что-то, просто утверждайте, что оно не меняется:
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; .to_not change {}.from
проходит, если переданное значение .from
не соответствует ожидаемому. В RSpec 2.99 это вызывает предупреждение.
Комментарии:
1. Это работает. Спасибо! Я скоро обновлюсь до RSpec 3, а затем также скорректирую свой синтаксис.