У меня есть собственный камень (только для обучения). Итак, у меня есть тестовое приложение, которое использует мой драгоценный камень. В моем приложении я создал файл инициализации для добавления пользовательского обратного вызова для моей модели gem.Rails Rspec test Slack :: Notifier
Что-то вроде этого:
#my_app/confing/initializers/my_nagios.rb
MyNagios::Check.class_eval do
after_save :send_slack_notification
private
def send_slack_notification
...
@notifier ||= Slack::Notifier.new "..."
...
@notifier.ping "..."
А сейчас я хочу, чтобы создать тест RSpec для этого обратного вызова.
я попробовать что-то вроде этого:
describe MyNagios::Check do
let(:slack_notifier) { double(Slack::Notifier) }
it 'should send notification' do
... some actions ...
expect(slack_notifier).to receive(:ping).with('test') # 'test' just for now, it will be replaced
Но я получаю сообщение об ошибке:
(Double Slack::Notifier).ping("test")
expected: 1 time with arguments: ("test")
received: 0 times
Должен ли я использовать double
для Slack::Notifier
или нет? Что не так в моем тесте?
Тем не менее, вам, вероятно, было бы намного легче написать эти тесты в самом камне, а не в приложении _using_ gem. – omnikron
Спасибо за помощь. Ну, не самое изящное решение, но теперь я использую что-то вроде этого: 'expect_any_instance_of (Slack :: Notifier) .to receive (: ping) .with ('...'). And_return (true)' –