gpt4 book ai didi

ruby-on-rails-3 - 通过 rake 运行 rspec 测试时在装饰器中获取未初始化的常量(NameError)

转载 作者:行者123 更新时间:2023-12-03 23:36:44 26 4
gpt4 key购买 nike

在我的应用程序中,我使用了一个引擎 (blogit),我想向其添加一些更改/行为。

我遵循了有关如何覆盖引擎 Controller /模型的指南并添加了以下内容:

代码

config/initializer/blogit.rb

# Requires extension ruby files in lib/blogit.
Dir[Rails.root.join("lib/blogit/*.rb")].each {|f| require f}

lib/blogit/engine.rb

module Blogit
class Engine < ::Rails::Engine
isolate_namespace Blogit

config.to_prepare do
Dir.glob(Rails.root + "app/decorators/**/blogit/*_decorator*.rb").each do |c|
require_dependency(c)
end
end
end
end

app/decorators/controllers/blog/comments_controller_decorator.rb

Blogit::CommentsController.class_eval do
def create
Rails.logger.info "decorated controller action"
# ... overridden stripped ...
end
end

app/decorators/models/blog/comment_decorator.rb

Blogit::Comment.class_eval do
belongs_to :user
end

待提及:

  • 我还创建了一个迁移以添加对评论模型的用户引用,因为我的应用程序使用设计并且我只希望登录用户能够发表评论。 (因此我不需要标准行为,所以我将覆盖它。)

问题

如果我运行 rake 我会得到奇怪的错误:

/Users/Kassi/.rvm/rubies/ruby-1.9.3-p392-railsexpress/bin/ruby -S rspec ./spec/controllers/home_controller_spec.rb ./spec/models/user_spec.rb
/Users/Kassi/demo/app/decorators/controllers/blogit/comments_controller_decorator.rb:3:in `<top (required)>': uninitialized constant Blogit::CommentsController (NameError)

但是,如果我手动运行 rake 提到的第一行 (.../ruby -S ...),所有测试都会成功运行。

在我的项目中,我使用 guardspork。 running guard 也会让测试顺利通过。

应用程序本身运行良好,即它启动时没有错误,我可以根据需要发表评论。我的装饰器操作代码正在执行。

那么运行 rake 有什么不同?为什么会坏?

注意:

  • 添加 require "blogit"require "blogit/comments_controller" 没有帮助。它实际上无法使用require 找到 Controller 。

一个演示应用程序

由于这个问题是一个更大项目的一部分,我出于测试目的从头开始创建了一个新应用程序,其中仅包含相关内容:基本 Rails 应用程序、rspec、devise、blogit 和装饰器。可以在这里找到:https://github.com/kassi/decorator_demo_rspec (git://github.com/kassi/decorator_demo_rspec.git)

另一个使用 testunit 的 repo(正在运行!)可以在这里找到:https://github.com/kassi/decorator_demo_testunit (git://github.com/kassi/decorator_demo_testunit.git)

最佳答案

您可以尝试 activesupport-decorators 而不是自己执行 require 语句那就是为你做的。

关于ruby-on-rails-3 - 通过 rake 运行 rspec 测试时在装饰器中获取未初始化的常量(NameError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18198911/

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