【发布时间】:2015-05-18 14:28:07
【问题描述】:
我试图在我的视图规范中访问设计辅助方法但没有成功。我以前见过很多类似的问题,但似乎没有一个专门回答我的问题,而回答的问题的解决方案对我不起作用。
Testing Views that use Devise with RSpec
这是我的 rails_helper.rb 文件
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.include FactoryGirl::Syntax::Methods
config.include Devise::TestHelpers, type: :controller
config.include Devise::TestHelpers, :type => :view
config.include ControllerMacros, :type => :controller
include Warden::Test::Helpers
Warden.test_mode!
end
这里是简单的 show.html.erb_spec.rb
describe "users/show.html.erb" do
it "displays the users own profile" do
member = create(:member)
login_as(member, :scope => :member)
user = member.user
assign(:user, user)
render(:template => 'users/show.html.erb')
end
end
现在请记住,我有一个用于设计的“成员模型”和一个用于保存个人资料信息的“用户模型”。他们有一个拥有一个/属于一个的关系。
我使用 current_member 助手(由 devise 提供),在我的应用程序控制器中我有:
class ApplicationController < ActionController::Base
include UsersHelper
helper_method :current_user
before_action :authenticate_member!
before_action :current_user
before_filter :instantiate_search
def current_user
if member_signed_in?
@current_user = User.find_by_member_id(current_member.id)
end
end
所以基本上我还定义了一个 current_user,它是 current_member 的用户。
我的问题是在我的 show.html.erb 文件中我使用 current_user
我的错误是
undefined local variable or method `current_user' for #<# <Class:0x007fb6139e7f48>:0x007fb6139d6fe0>
我需要能够在我的测试中访问设计 current_member 但我不能。
我们将不胜感激地接受任何帮助。
edit:这行得通,但是是可怕的代码。
有没有更好的办法?
require 'rails_helper'
describe "users/show.html.erb" do
it "displays the users own profile" do
@request.env["devise.mapping"] = Devise.mappings[:member]
@member = create (:member)
sign_in @member
@user = @member.user
def view.current_user
@user
end
assign(:user, @user)
render(:template => 'users/show.html.erb')
end
end
【问题讨论】:
-
嗨,@GhostRider,我也遇到了同样的问题。你找到更优雅的解决方案了吗?