当前位置: 首页 > 知识库问答 >
问题:

如何测试RSpec中是否发生了带参数的方法调用

从光启
2023-03-14

在我的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\u event不是控制器的方法,第二个错误如下:

    RSpec::Mocks::MockExpectationError: (EventTracker).track_event("User Action")
    expected: 1 time with arguments: ("User Action")
    received: 0 times
    

    有人知道如何用RSpec测试这种方法吗?

    谢了D

  • 共有1个答案

    夏俊杰
    2023-03-14

    我找到了让它工作的方法!

    基本上,除了在正确的地方打“邮政”电话之外,我做的一切都是正确的。

    调用必须在以下之后完成:

      expect(controller).to receive(:track_event).with('User Action')
    

    i、 e.以下代码将正常工作:

      expect(controller).to receive(:track_event).with('User Action')
      post :new_user_action_post
    

    而不是之前。

    我希望能帮助某人!;)

    D

     类似资料:
    • 所以我肯定有类似的东西在那里,但我已经搜索了一个小时,还没有找到确切的我要找的东西。假设我有一个这样的类: 我该如何制作这样的作品?

    • 问题内容: 因此,我敢肯定那里有类似的东西,但是我一直在寻找一个小时,却没有找到我真正想要的东西。说我有一堂课,看起来像这样: 我该如何做这样的工作? 问题答案: 使用Mockito,您可以像这样 监视真实对象 : 有一些陷阱,因此也请查看相关文档。

    • 我需要测试来运行该方法。我有这样的课: 我不能改变这门课。我不能将方法的可见性从private更改为public或向类中添加另一个方法。这门课不让我写一个字。 所以我写了这个测试: 提前道谢。

    • 我正在测试路由器,有两个函数,我需要测试第一个函数是否被调用,第二个函数是否被调用。有方法

    • 假设我们有这样一种方法: 在单元测试中,我们希望断言被调用过一次,而且只有一次;因此,我们可以在测试中使用另一个模拟结构来模拟它,这将为我们提供检查它是否已被调用的功能: 在单元测试中: 现在,问题是,由于是用关键字调用的,我们不能确定当我们在测试中到达断言时,它是否被调用过。 向

    • 我在Apex中有一个触发器。如何编写检查触发器是否被调用的单元测试?