Ruby on rails Rspec和Draper:类名上的单位化常量
在Rails 4上,当我为装饰程序执行rspec测试时,我得到了以下错误:Ruby on rails Rspec和Draper:类名上的单位化常量,ruby-on-rails,rspec,draper,Ruby On Rails,Rspec,Draper,在Rails 4上,当我为装饰程序执行rspec测试时,我得到了以下错误: /app/spec/decorators/my_decorator_spec.rb:3:in `<top (required)>': uninitialized constant MyDecorator (NameError) 将生成spec/my_decorator_spec.rb文件,其内容如下: require 'spec_helper' describe MyDecorator do end 然
/app/spec/decorators/my_decorator_spec.rb:3:in `<top (required)>': uninitialized constant MyDecorator (NameError)
将生成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文件时,我的decorator规范文件中的测试都会正确执行
它的工作原理是:
rspec spec/
它没有:
rspec spec/decorators
rspec spec/decorators/my_decorator_spec.rb
这是由于在文件顶部使用
require'spec\u helper'
而不是require'rails\u helper'
生成装饰器规范。当您在装饰器规范之前运行其他规范时(例如,当运行rspec spec/
时,控制器规范,因为c在d之前),那么在运行装饰器规范之前,它们最终需要正确的文件,所以一切都很好
解决方案是在装饰器规范中用rails\u helper替换所需的规范\u helper:
perl -pi -e 's/spec_helper/rails_helper/' spec/decorators/*
这样做之后,运行rspec spec/decorators
应该不会有任何问题
注:已在德雷珀回购协议中做出,但它是在创业板2.1.0版发布后做出的,这是创业板最新的非预发布版本
perl -pi -e 's/spec_helper/rails_helper/' spec/decorators/*