【发布时间】:2015-07-24 00:05:39
【问题描述】:
我需要断言代码路径是否会记录特定事件。
假设在我的代码中:
Logging::Tracking.logger.log_event(event_name: 'some event')
Logging::Tracking.logger.log_event(event_name: 'some other event')
Logging::Tracking.logger.log_event(
event_name: 'cool_event',
event_data: { request_id: @request.id, user_id: @user.id }
)
在规格中:
allow(Logging::Tracking.logger).to receive(:log_event)
expect(Logging::Tracking.logger).to receive(:log_event) do |params|
expect(params[:event_name]).to eq('cool_event')
expect(params[:event_data][:request_id]).to eq(@request.id)
expect(params[:event_data][:user_id]).to eq(@user.id)
end
这个断言在 RSpec 2 中是有效的,但是,在 RSpec 3 中,测试会失败:
Failure/Error: expect(params[:event_name]).to eq('cool_event')
expected: "cool_event"
got: "some event"
(compared using ==)
一种解决方案是制作一个模拟记录器对象,它将所有接收到的调用存储在内存中,然后断言事件是否存在于接收到的调用中。但是,我很想知道是否有办法只使用 RSpec 断言。
谢谢,
【问题讨论】:
标签: ruby-on-rails ruby unit-testing rspec rspec3