2014-06-07 9 views
1

я тест работает на RSpec 2, так что если partner_id присутствует, agency_id не должно:обновление до RSpec 3 - как заменить должен validate_absence_oo

describe "tests on deals models validations for AGENCY_ID" do 
    context "if partner_id present" do 
    before { subject.stub(:partner_id) { 2 } } 
    it { should validate_absence_of(:agency_id) } 
    end 

Как это сделать с помощью RSpec 3?

Я попробовал:

it "should reject model if agency_id present AND partner_id is also already present" do 
    allow(subject).to receive(:partner_id) { 2 } 
    expect(Customer.new).to have(1).errors_on(:agency_id) 
    end 
end 

, но он не работает, это своего рода нонсенс.

ответ

1

see here:

context "if partner_id present" do 
    before { allow(subject).to receive(:partner_id) { 2 } } 
    it { is_expected.to validate_absence_of(:agency_id) } 
end 

Кроме того, в новом синтаксисе вы все равно можете использовать старый один-лайнер синтаксис:

should был разработан назад, когда RSpec-ожидания были только SHOULD- основанный на синтаксисе. Тем не менее, он по-прежнему доступен и работает , даже если синтаксис :should отключен (так как это просто удаляет Object#should, но это RSpec::Core::ExampleGroup#should).

Так что это будет работать:

context "if partner_id present" do 
    before { allow(subject).to receive(:partner_id) { 2 } } 
    it { should validate_absence_of(:agency_id) } 
end