2

在 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
4

1 回答 1

5

这是因为装饰器规范是在文件顶部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

注意:此更改已在 draper repo 中进行,但它是在 gem 的 2.1.0 版本发布之后进行的,这是 gem 的最新非预发布版本。

于 2017-03-25T17:52:26.040 回答