![](/img/trans.png)
[英]Rspec controller test - how to pass arguments to a method I'm testing
[英]How to test if a method call with arguments happened in RSpec
在我的Ruby应用程序中,我试图用RSpec测试一个用控制器参数调用的模块方法。
有问题的模块是用于跟踪分析的EventTracker模块: https : //github.com/doorkeeper/event_tracker
情况就是这样:
从我的控制器我从控制器调用方法如下:
class InvestorHomeController < ApplicationController def do_something track_event 'User Action' end end
track_event
方法在EventTracker
模块中定义,如下所示:
module EventTracker module HelperMethods def track_event(event_name, args = {}) (session[:event_tracker_queue] ||= []) << [event_name, args] end end
结束
我尝试了不同的解决方案,但没有任何对我有用。 喜欢:
expect(controller).to receive(:track_event).with('User Action') expect(EventTracker).to receive(:track_event).with('User Action')
第一个它不起作用因为track_event
不是控制器的方法,而对于第二个我得到了以下错误:
RSpec::Mocks::MockExpectationError: (EventTracker).track_event("User Action")
expected: 1 time with arguments: ("User Action")
received: 0 times
谁知道如何用RSpec测试这种方法?
感谢:D。
我找到了让这个工作的方法!
基本上,除了在正确的位置进行“发布”呼叫之外,我做的一切都是正确的。
后调用必须在以下后完成:
expect(controller).to receive(:track_event).with('User Action')
即下面的代码将没有任何问题:
expect(controller).to receive(:track_event).with('User Action')
post :new_user_action_post
而不是之前。
我希望能帮助别人! ;)
D.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.