使用Rails 4可安装引擎时,Rspec视图失败

时间:2014-01-27 17:30:22

标签: ruby-on-rails rspec rspec-rails

我创建了一个带有可安装的Rails 4引擎的Rails 4应用程序Foobar。该引擎包含Items的脚手架。

在引擎中设置rspec-rails后,我无法通过视图规范。

我收到以下错误:

2) foobar/items/index renders a list of items
   Failure/Error: render
   ActionView::Template::Error:
     undefined method `item_path' for #<#<Class:0x007fe6dae7b3c8>:0x007fe6da9a2ec8>
   # ./app/views/foobar/items/index.html.erb:21:in `block in ___sers_ianneub__ocuments__ode_rails_engine_spec_test_engines_foobar_app_views_foobar_items_index_html_erb__1719273292435665376_70314743713380'
   # ./app/views/foobar/items/index.html.erb:16:in `each'
   # ./app/views/foobar/items/index.html.erb:16:in `___sers_ianneub__ocuments__ode_rails_engine_spec_test_engines_foobar_app_views_foobar_items_index_html_erb__1719273292435665376_70314743713380'
   # ./spec/views/foobar/items/index.html.erb_spec.rb:20:in `block (2 levels) in <top (required)>'

在外部应用程序或引擎的spec / dummy应用程序中启动rails服务器时,所有视图似乎都运行正常。

所以我的问题是:

为什么rspec测试失败,即使引擎服务器上的引擎视图工作正常?

奖金问题:

我可以在index.html.erb更改哪些内容以使测试通过?

我真的想要了解rspec测试中的功能。恕我直言,似乎rspec(和/或rspec-rails)存在一个问题,导致无法正常工作。就像在测试中没有加载的东西通常会使这个工作在rails服务器中。换句话说:如果它在rails服务器中工作,那么它应该以相同的方式在rspec中工作。这是对的吗?我错过了什么?

该应用程序可在此处获得: https://github.com/ianneub/rails-engine-spec-test

您应该能够克隆存储库并运行这些命令来复制错误:

  1. cd engines/foobar
  2. bundle install
  3. rspec
  4. 提前感谢您与我(以及全世界)分享的任何帮助和指导。

2 个答案:

答案 0 :(得分:0)

'index.html.erb'视图中的第21行需要确定foobar gem。

<td><%= link_to 'Show', foobar.item_path(item) %></td>

答案 1 :(得分:0)

那是因为Rspec渲染器不包含url_helpers方法,但是rails渲染器以某种方式包含了这些方法。可以修复 a before hook:

RSpec.configure do |config|
  config.before(:example, type: :view) do
    view.class_eval do
      include <Your Engine Namespace>::Engine.routes.url_helpers
    end
  end
end