У меня есть объект ActiveRecord, который создается/сохраняется примерно в 50% моего пакета RSpec. Я хочу заглушить его проверку через набор, кроме контекста, где я явно проверяю поведение проверки.Проверка валидации на ActiveRecord через набор тестов RSpec
Для достижения этой цели, я погасил ее глобально с помощью конфигурации
config.before(:each) do
allow_any_instance_of(Activerecord::Abc).to receive(:abc_validate).and_return(true)
end
, а затем переписал окурок в конкретном контексте
context "Validations" do
context "abc_validate" do
before :each do
allow_any_instance_of(Activerecord::Abc).to receive(:abc_validate).and_call_original
end
it "should ..... " do
........
end
end
end
Это соответствует моим требованиям. Тем не менее, это не эффективно, поскольку, хотя мне нужен заглушка только для примерно 50% моего набора тестов RSpec, я на самом деле укусил его для каждого модульного теста. Даже модульные тесты, которые не нуждаются в заглушке, будут иметь острую функцию.
Есть ли лучший способ сделать это?
Я думал о другом: вместо того, чтобы накладывать метод, я могу повторно открыть класс в RSpec и переписать функцию пользовательской проверки.
Activerecord::Abc.class_eval do
def abc_validate(testing_self = false)
testing_self ? super : true
end
end
Однако этот подход кажется слишком хриплым.
Версия детали -
- Rails 4.2.4
- Rspec 3.3.0
Stubbing кажется прекрасным для меня. Я все время занимаюсь этим целым набором тестов. Вы обеспокоены тем, что ваш заглушка замедляет ваш набор тестов? –