Rspec和Draper:类名的单位化常量

时间:2016-06-12 10:01:43

标签: ruby-on-rails rspec draper

On 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

1 个答案:

答案 0 :(得分:4)

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

N.B。:This change已在draper repo中制作,但它是在宝石的2.1.0版本发布之后制作的,这是宝石的最新非预发布版本。