2

我有一个项目使用 wisper https://github.com/krisleech/wisper来提供发布者和订阅者功能。

gem 在开发和生产模式下完美运行。但是,当我尝试为它们添加一些测试时(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 时,测试失败了,因为发布者从不发布任何内容,因此状态没有正确更新。

4

1 回答 1

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

于 2015-07-22T21:18:30.787 回答