gpt4 book ai didi

ruby-on-rails - Rspec 和 Draper : unitialized constant on class name

转载 作者:行者123 更新时间:2023-12-02 04:09:04 26 4
gpt4 key购买 nike

在 Rails 4 上,当我对装饰器执行 rspec 测试时,出现以下错误:

/app/spec/decorators/my_decorator_spec.rb:3:in `<top (required)>': uninitialized constant MyDecorator (NameError)

我肯定错过了一些东西,但我不知道是什么。

我生成装饰器

rails g decorator My

生成一个spec/my_decorator_spec.rb文件,内容为:

require 'spec_helper'

describe MyDecorator do
end

然后我测试

rspec spec/decorators/my_decorator_spec.rb

我没有在application.rb或spec_helper.rb中添加任何内容。装饰器本身可以正常工作。

编辑

这比我想象的还要奇怪。当我测试所有 rspec 文件时,装饰器规范文件中的测试会正确执行。

它有效:

rspec spec/

事实并非如此:

rspec spec/decorators
rspec spec/decorators/my_decorator_spec.rb

最佳答案

这是由于装饰器规范是通过文件顶部的 require 'spec_helper' 而不是 require 'rails_helper' 生成的。当您在装饰器规范之前运行其他规范时(例如,在运行rspec spec/时, Controller 规范,因为 c 在 d 之前),那么它们最终需要正确的在装饰器规范运行之前文件,所以一切都很好。

解决方案是在装饰器规范中用rails_helper 替换spec_helper 要求:

perl -pi -e 's/spec_helper/rails_helper/' spec/decorators/*

完成此操作后,运行rspec spec/decorators应该不会有任何问题。

注意:This change已在 draper repo 中制作,但它是在 gem 2.1.0 版本发布后制作的,这是 gem 的最新非预发布版。

关于ruby-on-rails - Rspec 和 Draper : unitialized constant on class name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37772950/

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