使用Minitest在Rails功能测试中对current_user进行stubbing

时间:2015-10-21 19:00:13

标签: ruby-on-rails minitest stub

我在控制器的Rails功能测试中存在一些问题。我正在使用Rails 4和Minitest。目前,在设置块中我有这一行。

ApplicationController.any_instance.stubs(:current_user).returns(users(:admin))

那是有效的;但是,我从我的视图中收到以下错误:current_user被引用到路由/ url帮助器(edit_user_path(current_user))。

ActionView::Template::Error: No route matches {:action=>"edit", :controller=>"users", :id=>nil} missing required keys: [:id]

在控制器/功能测试中对current_user进行存根的推荐方法是什么?这是我的全部测试。

require 'test_helper'

class Admin::SitesControllerTest < ActionController::TestCase
  setup do
    @site = sites(:test)
    @request.env['HTTP_HOST'] = "#{@site.ssl_prefix}.testing.com"
    ApplicationController.any_instance.stubs(:current_user).returns(users(:admin))
  end

  test "should show edit form" do
    get :edit, id: @site.id
    assert_response :success
    assert_template layout: "layouts/admin/layout"
  end
end

1 个答案:

答案 0 :(得分:2)

一如往常,有很多方法可以做到这一点。存根控制器实例的推荐方法是直接在您正在处理的实例上存根。

def setup
  @controller.stubs(:current_user).returns(users(:admin))
end

在控制器测试中,您可以访问@controller实例。

希望这有帮助。