rails wisper under test

时间:2015-07-22 20:41:39

标签: ruby-on-rails ruby wisper

我有一个项目使用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时,测试失败了,因为发布者从未发布任何内容,因此状态未正确更新。

1 个答案:

答案 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