Рельсы тестер
У меня есть проект, который использовал wisper https://github.com/krisleech/wisper для обеспечения функциональности издателя и подписчиков. Драгоценный камень прекрасно работает в режимах разработки и производства. Однако, когда я пытаюсь добавить для них несколько тестов (rake test: интеграция), вновь добавленные тесты отказываются работать. Издатель (возможно, также слушатель) в режиме тестирования перестал работать.
Core::Request.subscribe(Listener::Studentlistener, async: true)
Core::Request.subscribe(Listener::Tutorlistener, async: true)
Я использовал sidekiq в качестве асинхронного бэкэнда, я использовал гем wisper-sidekiq для обработки асинхронных запросов, не уверен, что это будет проблемой? Пума как сервер, МРТ рубин 2.0.0
Нужно ли что-то настраивать для запуска теста?
it "Student can get latest status after looking for xxx tutor" do
post api_v1_students_request_look_for_xxx_tutor_path,
{ subject: 'nothing' },
{ "AUTHORIZATION" => "xxx"}
expect(response).to be_success
get api_v1_students_status_path, nil,
{ "AUTHORIZATION" => "xxx"}
expect(response).to be_success
json_response = JSON.parse(response.body)
expect(json_response['state']).to eq('matching')
end
Слушатель должен получить публикацию между этими двумя сообщениями и обновить состояние до "совпадающего". Однако теперь, когда я запускаю rspec, тест не удался, потому что издатель никогда ничего не публикует и, следовательно, состояние не обновляется правильно.
1 ответ
Даже авторы полагаются на некоторые насмешки в тестах интеграции, так что это может быть правильным способом.
class MyCommand
include Wisper::Publisher
def execute(be_successful)
if be_successful
broadcast('success', 'hello')
else
broadcast('failure', 'world')
end
end
end
describe Wisper do
it 'subscribes object to all published events' do
listener = double('listener')
expect(listener).to receive(:success).with('hello')
command = MyCommand.new
command.subscribe(listener)
command.execute(true)
end
https://github.com/krisleech/wisper/blob/master/spec/lib/integration_spec.rb