RSpec: разница между is_expect и ожидаемым - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть две спецификации здесь:

it 'is not an included preferred gender' do
  house.preferred_gender = 3
  is_expected.not_to be_valid
end

it 'is an included preferred gender' do
  house.preferred_gender = 2
  expect(house).to be_valid
end

Что я не понимаю, так это то, что если я заменю в своей второй спецификации expect(house).to be_valid на is_expected.to be_valid, то мой тест не пройден:

Сбои:

1) House preferred gender is an included preferred gender
     Failure/Error: is_expected.to be_valid
       expected #<House id: nil, rent: nil, deposit: nil, description: nil, preferred_gender: nil, created_at: nil, updated_at: nil, available_at: nil, user_id: nil, lease_length: nil, built_in: nil> to be valid, but got errors: User must exist, Rent can't be blank, Rent is not a number, Preferred gender can't be blank, Preferred gender is not included in the list, Available at can't be blank
     # ./spec/models/house_spec.rb:94:in `block (3 levels) in <main>'

Finished in 16.27 seconds (files took 3.02 seconds to load)
52 examples, 1 failure

Почему это происходит?Заранее большое спасибо!

1 Ответ

0 голосов
/ 28 ноября 2018

is_expected определяется просто как ожидаемый (субъект) и предназначен для случаев, когда вы используете rspec-ожидания с его новым синтаксисом, основанным на ожиданиях.

https://relishapp.com/rspec/rspec-core/docs/subject/one-liner-syntax

Поскольку проверяемый объект house не subject, я предполагаю, что subject не инициализирован, поэтому установлен по умолчанию (described_class.new).is_expected ожидание звонков по этой теме по умолчанию.

Чтобы использовать is_expected, инициализируйте тему:

describe House do
   subject { House.new(...) } # or build :house if you use FactoryBot
   # ...
end
...