Я пишу спецификацию для обратного вызова after_create. Спецификация выглядит следующим образом:Assert Издание Redis
it 'broadcasts creation' do
message = Message.create(body: 'foo')
expect(Redis.any_instance).to have_received(:publish)
end
Моей Message
модель выглядит следующим образом:
class Message < ActiveRecord::Base
after_create -> { publish(:create) }
private
def publish(name)
Redis.new.publish(
self.class.inferred_channel_name,
json(action)
)
Redis.new.publish(
inferred_channel_name_for_single_record,
json(action)
)
puts 'published!'
end
end
Я знаю, что обратный вызов работает, потому что я печать «опубликовал» в конце, и я проверил, что Redis действительно публикует что-то дважды.
Тем не менее, моя спекуляция терпит неудачу со следующим сообщением:
1) Message Methods #entangle without options broadcasts creation
Failure/Error: expect(Redis.any_instance).to have_received(:publish)
unstubbed, expected exactly once, not yet invoked: #<AnyInstance:Redis>.publish(any_parameters)
# ./spec/models/message_spec.rb:20:in `block (5 levels) in <top (required)>'
Я использую bourne с мокко использовать have_received
Искателя.
Как я могу пройти этот тест?
Я бы отметил, что есть камень mock_redis, который делает эту работу тривиальной. –