Ruby on rails 3 Gem测试可以';无法使用的url_查找路由

Ruby on rails 3 Gem测试可以';无法使用的url_查找路由,ruby-on-rails-3,routes,gem,rspec2,rspec-rails,Ruby On Rails 3,Routes,Gem,Rspec2,Rspec Rails,我认为运行gem测试的虚拟应用程序设置不正确,因为当我在gem的助手中的Gadget实例(虚拟应用程序中的存根模型)上调用url\u for时,我得到 undefined method `gadgets_path' for #<#<Class:0x007fe274bc1228>:0x007fe273d45eb0> spec/spec\u helper.rb文件如下所示: ENV["RAILS_ENV"] ||= "test" require File.expand_p

我认为运行gem测试的虚拟应用程序设置不正确,因为当我在gem的助手中的Gadget实例(虚拟应用程序中的存根模型)上调用
url\u for
时,我得到

undefined method `gadgets_path' for #<#<Class:0x007fe274bc1228>:0x007fe273d45eb0>
spec/spec\u helper.rb
文件如下所示:

ENV["RAILS_ENV"] ||= "test"

require File.expand_path("../dummy/config/environment", __FILE__)
require 'rspec/rails'

require 'rspec/autorun'

RSpec.configure do |config|
  config.mock_framework = :rspec
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"

  config.include Rails.application.routes.url_helpers
end
(实际上,您可以在中看到完整的测试设置。我大约在一周前打开了它,但直到现在我才开始尝试解决它。)

一个未挂起的测试创建一个Gadget实例,然后将其作为参数调用helper。当助手尝试(@gadget)的
url\u时,会触发上述错误

这里怎么了


ETA 12月4日:更新了当前的
spec\u helper.rb

虽然这是相当多的源代码,但在我看来,您正在调用
editable\u字段
,该字段反过来调用
url\u以获取
。但是,<>代码> ULLY只适用于控制器的上下文,而您只在S/.P>中调用它。
因此,也许删除此方法或进行集成测试将是一个合适的解决方法。

Update

把这个放在你的spec_helper.rb中-至少这对我有用(我克隆了你的repo)

真正的问题是,
TestController
是从
ActionController::Base
中派生出来的,而
ActionController::Base
是通过route helper方法扩展的。
因此,您需要将其注入到
TestController
中。此外,AbstractController::UrlFor需要实现
\u路由


要使用路由帮助程序,应插入

Rspec.configure do |config|
  config.include Rails.application.routes.url_helpers
  ...
end
在spec_helper.rb中,它使所有
something_path
方法可用。 另一种解决实际问题的方法是像这样剔除帮助者:

helper.stub!(:url_for).and_return("/path")

可编辑_字段
是一种辅助方法
url\u for
实际上在助手中工作得非常好;它在测试环境中不起作用。stubing
editable\u field
不是一个合适的解决方法,因为这是我尝试测试的方法。如果你打开rails控制台并执行
editable\u field
操作,它会工作吗?我认为不会,因为它需要在请求的上下文中,为
url\u设置环境,以便
工作。所以我建议为
设置存根
url\u,而不是
editable\u字段
。现在,这是对
的stubing
url\u的三次投票,这很有意义。另外,感谢您指出请求上下文以及它如何为
url\u设置环境。我还没有意识到这一点,尽管现在我知道了这一点,这当然很有意义。这看起来很有希望,当我进入虚拟应用程序并使用Rails控制台时,我可以戳出该对象并获取路径。但是,它不允许运行测试。我已经根据您的建议更新了上面的
spec\u helper.rb
代码。(它也在Github上更新了。)关于“真正的问题”你完全正确,这本身就解决了问题。谢谢!这修复了引发此错误的我的规范:
Failure/error:helper.url\u(子域:'app',控制器:'dashboard',操作:'index')。是否应eq'http://app.example.com/'RuntimeError:为了将#url_用于,必须明确包含路由帮助程序。例如,包括Rails.application.routes.url\u helpers
Rspec.configure do |config|
  config.include Rails.application.routes.url_helpers
  ...
end
helper.stub!(:url_for).and_return("/path")