gpt4 book ai didi

ruby-on-rails-3 - Gem 测试无法使用 url_for 找到路线

转载 作者:行者123 更新时间:2023-12-04 06:59:56 24 4
gpt4 key购买 nike

我认为运行我的 gem 测试的虚拟应用程序设置不正确,因为当我调用 url_for 时在 gem 的助手中的 Gadget 实例(来自虚拟应用程序的 stub 模型)上,我得到

undefined method `gadgets_path' for #<#<Class:0x007fe274bc1228>:0x007fe273d45eb0>

背景:我 fork 了一颗 gem 并进行了一些重大更改。 ( Here's the fork .) 现在我正在尝试使 rspec 测试正常工作,以便我可以验证我的更新。

测试像 Rails 引擎一样设置,在 spec 中有一个虚拟应用程序。目录。该应用程序有一个模型( Gadget ),带有适当的 Controller 和在 spec/dummy/environment/routes.rb 中声明的资源。文件:
Dummy::Application.routes.draw do
resources :gadgets
end
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

(您实际上可以在 the project's github repo 中看到完整的测试设置。我实际上是在一周左右之前打开 an issue 的,但直到现在我才开始尝试解决它。​​)

一个未挂起的测试会创建一个 Gadget 实例,然后以它作为参数调用助手。当助手尝试 url_for(@gadget) ,它会触发上述错误。

这里有什么问题?

ETA 12 月 4 日:更新为当前 spec_helper.rb .

最佳答案

更新

把它放在你的 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

真正的问题是 TestControllerActionController::Base 子类化 之前 ActionController::Base使用路由辅助方法进行扩展。
所以你需要将它注入(inject)到 TestController .此外 AbstractController::UrlFor 需要 _routes将要执行。

为了使用路由助手,您应该插入
Rspec.configure do |config|
config.include Rails.application.routes.url_helpers
...
end

在您的 spec_helper.rb 中,这使得所有 something_path可用的方法。
另一种方式 围绕真正的问题将像这样删除助手:
helper.stub!(:url_for).and_return("/path")

关于ruby-on-rails-3 - Gem 测试无法使用 url_for 找到路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13476334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com