Ruby on rails 3 Gem测试可以';无法使用的url_查找路由
我认为运行gem测试的虚拟应用程序设置不正确,因为当我在gem的助手中的Gadget实例(虚拟应用程序中的存根模型)上调用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
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
实际上在助手中工作得非常好;它在测试环境中不起作用。stubingeditable\u field
不是一个合适的解决方法,因为这是我尝试测试的方法。如果你打开rails控制台并执行editable\u field
操作,它会工作吗?我认为不会,因为它需要在请求的上下文中,为url\u设置环境,以便工作。所以我建议为
设置存根url\u,而不是editable\u字段
。现在,这是对
的stubingurl\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")