pjm*_*rse 4 gem routes rspec2 rspec-rails ruby-on-rails-3
我认为我的gem测试要运行的虚拟应用程序没有正确设置,因为当我url_for在gem的助手中调用Gadget实例(虚拟应用程序中的存根模型)时,我得到了
undefined method `gadgets_path' for #<#<Class:0x007fe274bc1228>:0x007fe273d45eb0>
Run Code Online (Sandbox Code Playgroud)
背景:我分叉了一个宝石并做了一些重大改变.(这是分支.)现在我正在尝试使rspec测试工作,以便我可以验证我的更新.
测试设置类似于Rails引擎,在spec目录中有一个虚拟应用程序.该应用程序有一个model(Gadget),其中包含适当的控制器和spec/dummy/environment/routes.rb文件中声明的资源:
Dummy::Application.routes.draw do
resources :gadgets
end
Run Code Online (Sandbox Code Playgroud)
该spec/spec_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
Run Code Online (Sandbox Code Playgroud)
(你实际上可以在项目的github repo中看到完整的测试设置.我实际上已经在一周左右开启了这个问题,但现在我才开始试图解决它.)
一个未挂起的测试创建一个Gadget实例,然后将该调用作为参数调用.当帮助程序尝试时url_for(@gadget),它会触发上述错误.
这有什么不对?
ETA Dec 04:更新了当前版本spec_helper.rb.
kri*_*ard 10
更新
把它放在你的spec_helper.rb里面 - 至少这对我有用(我克隆你的回购)
ActionView::TestCase::TestController.instance_eval do
helper Rails.application.routes.url_helpers#, (append other helpers you need)
end
ActionView::TestCase::TestController.class_eval do
def _routes
Rails.application.routes
end
end
Run Code Online (Sandbox Code Playgroud)
真正的问题是之前使用路径辅助方法扩展的TestController子类.
所以你需要把它注入.此外,AbstractController :: UrlFor需要实现.ActionController::Base ActionController::BaseTestController_routes
要使用路由助手,您应该插入
Rspec.configure do |config|
config.include Rails.application.routes.url_helpers
...
end
Run Code Online (Sandbox Code Playgroud)
在spec_helper.rb中,它使所有something_path方法都可用.解决真正问题的另一种方法是将助手固定下来:
helper.stub!(:url_for).and_return("/path")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2979 次 |
| 最近记录: |