【问题标题】:View helper methods not included for Devise views in rspec integration/request tests?查看 rspec 集成/请求测试中的设计视图不包含的辅助方法?
【发布时间】:2011-10-20 10:24:57
【问题描述】:

当我在浏览器中访问我的登录页面时,一切正常。

当我在 rspec 集成/请求测试中访问我的登录页面时,我收到以下错误:

ActionView::Template::Error:
   undefined method `title' for #<#<Class:0x00000007af9180>:0x00000007af32a8>

title 方法由视图使用并在 ApplicationHelper 中定义,该设计似乎在使用浏览器时找到。但是,在 rspec 集成测试期间,devise 无法找到辅助方法。

有什么我应该存根的吗?在集成测试中存根似乎是错误的。还有其他想法吗?

(这个问题不是关于如何在集成测试中包含设计助手。我正在手动填写登录表单以进行身份​​验证)。

【问题讨论】:

  • 内森,你有没有得到任何地方?我在使用 capybara 和 rspec 请求规范时遇到了同样的问题;如果测试中涉及的视图调用任何辅助方法,我会得到一个异常。就我而言,只有当我有警卫运行时才会发生这种情况。手动运行 rspec 工作。谢谢
  • 没有。我没有。但是,我发现在某些情况下,spork 给我带来了问题(一些测试在 spork 之外运行时有效)。
  • 谢谢。我做了更多的测试,发现 spork 是罪魁祸首。还没有确定到底是什么问题,但没有 spork,没关系。

标签: ruby-on-rails rspec devise integration-testing


【解决方案1】:

我在安装 devise 时使用 Cucumber 时遇到了类似的问题:

undefined local variable or method `flash_block' for #<#<Class:0x007ffd0a28dae8>:0x007ffd0b2f6d58> (ActionView::Template::Error)

我通过在env.rb 中包含模块解决了这个问题

Spork.prefork do
  include FlashBlockHelper

我希望这会有所帮助。

【讨论】:

  • 这为我解决了这个问题(使用 ApplicationHelper 等代替)。谢谢!
【解决方案2】:

看起来像this issue。 (在某些情况下与 ActiveAdmin https://github.com/gregbell/active_admin/wiki/Use-spork 有关)

Here我发现了一个适合我的 hack(REE 1.8.7、Rails 3.1、Capybara、Devise、active_admin)。

但是,这不太可能被合并,所以我将 spork-rails 分叉到 here 并应用了该补丁。你可能知道我可以将我的 Gemfile 指向那个 repo:

gem 'spork-rails', :git => "git://github.com/chopmo/spork-rails.git"

不是最佳的,但它现在可以完成工作。

【讨论】:

  • 感谢您关注此问题。我尝试在我的 Gemfile 中包含你的 gem,运行 bundle install,然后当我运行 spork 时,我收到以下错误:“未定义的方法 inject' for Gem::Specification:Class (NoMethodError) /home/nathan/.rvm/gems/ruby-1.9.2-p180@OfficeHours/gems/spork-1.0.0rc2/lib/spork/gem_helpers.rb:5:in latest_specs'”。我正在运行 1.9.2 和 Rails 3.0。
  • Chopmo,你提到的问题最近有一些新的 cmets 帮助我解决了这个问题。对我来说,这是与 ActiveAdmin 的冲突 - 已通过 github.com/gregbell/active_admin/wiki/Use-spork 解决。我更新了您的答案以包含此内容。
  • 非常感谢 Chopmo 的分叉:它正在工作!研究 Github 问题,我认为我们应该谨慎对待这个 hack,因为它肯定有什么东西坏了,但我还想不通。顺便说一句,这个问题与我项目中的 ActiveAdmin 无关,但我还不知道是什么。
  • 抱歉,我没有跟进此事,由于某种原因,我没有收到 SO 通知。但我很高兴听到您成功了!
【解决方案3】:

在 /spec/support 中使用以下内容创建 devise.rb:

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end

确保您的 spec_helper.rb 包括:

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

你的规格有:

require 'spec_helper'

【讨论】:

  • 这不是包含设计助手的问题。
猜你喜欢
  • 2012-01-01
  • 2012-08-08
  • 2011-07-25
  • 2014-11-19
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
相关资源
最近更新 更多