测试是否在rspec中调用控制器操作中的方法。嘲弄

时间:2016-04-06 00:00:21

标签: ruby-on-rails-3

某些背景: 我试图测试一个方法是否在控制器的动作中被调用。我正在尝试记录用户注册的位置(移动,网络等)。

为控制器编写此规范而苦苦挣扎。我编写了这个测试,以确保调用控制器操作中的post_signup:

describe Api::Users::FacebookConnectController do
...
  it "should log an event with an app_context" do
        expect_any_instance_of(described_class).to receive(:post_signup)

        subject
  end

它快速而且很脏,甚至不检查方法#post_signup被调用的参数。

我的实际控制器有一个#register方法,在某些时候调用这个post_signup方法:

  post_signup(user,
            Event::EventType::USER_FB_ACCOUNT_NON_SUBSCRIPTION_COMPLETED,
            app_context: current_app_id,
            description: "Automatically Populated Via #{current_app_id}")

包含在控制器中的帮助器内的post_signup方法如下所示:

def post_signup(user, event_type, app_context: current_app_id, description: "Automatically populated")
...
      Event.create!(
        event_type: event_type,
        date: Time.now.utc,
        eventable: user,
        description: description,
        app_context: app_context
      )
...
end

简而言之,对我来说这似乎是一件合理的事情。我想测试在控制器中调用#register动作时调用#post_signup

我的测试很糟糕我觉得因为我实际上并没有捕获实际的控制器。我正在测试控制器的任何实例都接收post_Signup方法,而我也没有指定参数。我怎么用模拟器做这个?如何测试所描述的类中的实际控制器而不仅仅是一些随机实例?如何检查是否使用名为app_context的参数调用post_signup?

0 个答案:

没有答案