RSpec: is_expect 和 expect 的区别
RSpec: difference between is_expect and expect
我这里有两个规格:
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
为什么会这样?
提前致谢!
is_expected
is defined simply as expect(subject) and is designed for when you are using rspec-expectations with its newer expect-based syntax.
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
我这里有两个规格:
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
为什么会这样? 提前致谢!
is_expected
is defined simply as expect(subject) and is designed for when you are using rspec-expectations with its newer expect-based syntax.
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