【问题标题】:Rspec and Draper : unitialized constant on class nameRspec 和 Draper:类名上的未初始化常量
【发布时间】:2016-06-12 10:01:43
【问题描述】:

在 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

【问题讨论】:

    标签: ruby-on-rails rspec draper


    【解决方案1】:

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

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

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

    一旦你这样做了,运行rspec spec/decorators应该没有问题。

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

    【讨论】:

      猜你喜欢
      • 2015-06-14
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多