Вы также можете проверить, что будут делать задания, запустив их или отключив очередь.
Настройте конфигурацию, когда захотите (т.е. в блоке before :each
).
Delayed::Worker.delay_jobs = false
или выполнить сохраненные задания
Delayed::Worker.new.work_off.should == [1, 0]
Я давно с удовольствием пользуюсь этим методом. Во-первых, используя новую поддержку any_instance
в RSpec, вы можете напрямую протестировать эффекты отложенных методов. Тем не менее, я нашел тесты, которые используют work_off
, чтобы быть медленным .
Что я обычно делаю сейчас:
mock_delay = double('mock_delay').as_null_object
MyClass.any_instance.stub(:delay).and_return(mock_delay)
mock_delay.should_receive(:my_delayed_method)
Тогда у меня есть отдельная спецификация для my_delayed_method
. Это намного быстрее, и, вероятно, лучше практики модульного тестирования - особенно для контроллеров. Хотя, если вы выполняете спецификации запросов или другие спецификации уровня интеграции, вам, вероятно, все еще нужно использовать work_off
.