Shoulda: Test проверяет наличие:on =>: update
Я использую Shoulda в сочетании с Test:: Unit на одном из проектов, над которыми я работаю. Проблема, с которой я сталкиваюсь, заключается в том, что я недавно изменил это:
class MyModel < ActiveRecord::Base
validates_presence_of :attribute_one, :attribute_two
end
К этому:
class MyModel < ActiveRecord::Base
validates_presence_of :attribute_one
validates_presence_of :attribute_two, :on => :update
end
Раньше мои (проходные) тесты выглядели так:
class MyModelTest < ActiveSupport::TestCase
should_validate_presence_of :attribute_one, :attribute_two
end
Насколько я могу судить, нет никакого параметра к should_validate_presence_of
, который заставит этот тест продолжать проходить с изменениями, указанными выше. Кроме отказа от Shoulda при тестировании требования :attribute_two
, Есть ли какой-либо способ обойти вот это?4 ответа:
В прошлом я просто использовал небольшой пользовательский блок, чтобы обойти эту проблему:
should "require :attr_two on update" do mm = Factory(:my_model) mm.attr_two = nil mm.save assert_equal false, mm.valid? assert_equal("can't be blank", mm.errors.on(:attr_two)) end
Надеюсь, что shoulda будет продолжать совершенствоваться, позволяя дальнейшие варианты проверки AR в будущем. Дайте мне знать, что вы думаете, ваше здоровье.
А как насчет чего-то вроде этого? (для
shoulda-matchers-3.1.1
)subject { FactoryGirl.build(:your_model) } it { is_expected.to validate_presence_of(:attribute_one) } it { is_expected.to validate_presence_of(:attribute_two).on(:update) }
В Rspec вы можете сделать следующее:
describe MyModelTest do describe "validations" do should_validate_presence_of :attribute_one context "on update" do subject { FactoryGirl.create(:my_model_test) } should_validate_presence_of :attribute_two end end end
Я попробовал решение, подобное тому, что предложил tsdbrown. Этот тип теста проходит, когда у меня есть:
validates_presence_of :attr_two
Но тест не пройдет, если я изменю модель на:
validates_presence_of :attr_two, :on => :save
Это не удается, потому что: attr_two ошибка [] вместо ["не может быть пустым"]