我在一个控制器的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]
建议在控制器/功能测试中stub 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
一如既往,有很多方法可以做到这一点。存根控制器实例的推荐方法是直接在您正在处理的实例上存根。
def setup
@controller.stubs(:current_user).returns(users(:admin))
end
在控制器测试中,您可以访问@controller实例。