使用 rspec 测试视图 - 渲染视图时帮助文件中未定义的 current_user

Posted

技术标签:

【中文标题】使用 rspec 测试视图 - 渲染视图时帮助文件中未定义的 current_user【英文标题】:Testing views with rspec - undefined current_user in helper file when rendering view 【发布时间】:2011-10-31 23:26:14 【问题描述】:

我正在使用 rspec,设计并尝试测试我的观点。 在我的视图调用的辅助函数中,我使用变量 current_user 这在实践中效果很好,但使用 rspec,我得到一个可悲的“未定义变量或方法 current_user”错误。

我尝试了很多不起作用的东西。

@user = FactoryGirl.build_stubbed(:user)
assign(current_user, @user)
sign_in :user, @user
def current_user
  @user
end
current_user = @user
view.stub!(:current_user).and_return @user
assign[:currrnet_user] = @user

有人知道怎么做吗?提前致谢。

【问题讨论】:

我也遇到了同样的问题。你有没有解决过?让我知道。谢谢。 【参考方案1】:

我必须这样做才能让它工作。

RSpec.describe 'foos/index.html.erb', type: :view do                                                              
  before do                                                                     
    controller.singleton_class.class_eval do                                    
      def current_user                                                        
        User.find_by(username: 'schmoe')                                     
      end                                                                     
      helper_method :current_user                                             
    end                                                                         
    render                                                                      
  end

  ...                                                                           
end                                                                            

【讨论】:

【参考方案2】:

因此,帮助方法的解决方案是存根它们。我不太喜欢这个解决方案,因为我认为它是一个错误,但它是做需要做的事情的方法。

【讨论】:

所以,您需要向我们展示如何您将其存根。我需要完成同样的事情,但你没有给出答案。请说明您如何/在何处存根,以便视图拾取它。

以上是关于使用 rspec 测试视图 - 渲染视图时帮助文件中未定义的 current_user的主要内容,如果未能解决你的问题,请参考以下文章

rspec 使用 draper Decorator 测试视图

在rails 2.3+中测试(rspec)嵌套模型部分

如何使用rails cucumber,rspec,capybara在视图(dhtml)中测试动态部分?

Rspec 数据库视图为空

带有视图测试和嵌套资源的 Rspec 和 Rails

在 RSpec 中测试 Rails 视图:为啥当我想测试“索引”时它会路由到“显示”?