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
答案 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版本发布之后制作的,这是宝石的最新非预发布版本。