我有一个项目使用wisper https://github.com/krisleech/wisper来提供发布者和订阅者功能。宝石在开发和生产模式下完美运行。但是,当我尝试为它们添加一些测试时(rake test:integration),新添加的测试拒绝工作。测试模式中的发布者(也许是监听者)已经停止工作了。
Core::Request.subscribe(Listener::Studentlistener, async: true)
Core::Request.subscribe(Listener::Tutorlistener, async: true)
我使用sidekiq作为异步后端,我使用wisper-sidekiq gem来处理异步请求,不确定这是否会出现问题? ,puma作为服务器,MRI ruby 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时,测试失败了,因为发布者从未发布任何内容,因此状态未正确更新。
答案 0 :(得分:0)
即使是作者也依赖于集成测试中的一些模拟/存根,所以这可能是正确的方法。
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