У меня есть объект organization
, который имеет атрибуты name, doing_business_as
. Мне нужно проверить, что name
не совпадает с doing_business_as
.
# app/models/organization.rb
class Organization < ActiveRecord::Base
validate :name_different_from_doing_business_as
def name_different_from_doing_business_as
if name == doing_business_as
errors.add(:doing_business_as, "cannot be same as organization name")
end
end
end
У меня есть соответствующий файл rspec, который проверяет это:
# spec/models/organization_spec.rb
require "rails_helper"
describe Organization do
it "does not allow NAME and DOING_BUSINESS_AS to be the same" do
organization = build(:organization, name: "same-name", doing_business_as: "same-name")
expect(organization.errors[:doing_business_as].size).to eq(1)
end
end
Однако, когда я запускаю спецификацию, она терпит неудачу, и это то, что я получаю:
$ rspec spec/models/organization_spec.rb
Organization
does not allow NAME and DOING_BUSINESS_AS to be the same (FAILED - 1)
Failures:
1) Organization validations does not allow NAME and DOING_BUSINESS_AS to be the same
Failure/Error: expect(organization.errors[:doing_business_as].size).to eq(1)
expected: 1
got: 0
(compared using ==)
# ./spec/models/organization_spec.rb:113:in `block (3 levels) in <top (required)>'
Finished in 0.79734 seconds (files took 3.09 seconds to load)
10 examples, 1 failure
Failed examples:
rspec ./spec/models/organization_spec.rb:110 # Organization validations does not allow NAME and DOING_BUSINESS_AS to be the same
Я ожидал, что спецификация пройдет, и убедитесь, что 2 атрибута не могут быть одинаковыми. В консоли Rails я могу подражать ожидаемому поведению, но я не могу заставить спецификацию успешно работать с ошибкой.
Я также проверил через Rails Console, что он работает как ожидалось:
$ rails c
> o = Organization.new(name: "same", doing_business_as: "same")
> o.valid?
=> false
> o.errors[:doing_business_as]
=> ["cannot be the same as organization name"]
Итак, я знаю, что есть функциональность, но я не могу получить работоспособный тест...