簡體   English   中英

如何測試RSpec中是否發生帶參數的方法調用

[英]How to test if a method call with arguments happened in RSpec

在我的Ruby應用程序中,我試圖用RSpec測試一個用控制器參數調用的模塊方法。

有問題的模塊是用於跟蹤分析的EventTracker模塊: https//github.com/doorkeeper/event_tracker

情況就是這樣:

  1. 從我的控制器我從控制器調用方法如下:

     class InvestorHomeController < ApplicationController def do_something track_event 'User Action' end end 
  2. track_event方法在EventTracker模塊中定義,如下所示:

     module EventTracker module HelperMethods def track_event(event_name, args = {}) (session[:event_tracker_queue] ||= []) << [event_name, args] end end 

    結束

  3. 我嘗試了不同的解決方案,但沒有任何對我有用。 喜歡:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM