![](/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.