Как исправить мой синтаксис RSpec для версии 2.99?

#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, а затем также скорректирую свой синтаксис.