Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec和Draper:类名上的单位化常量_Ruby On Rails_Rspec_Draper - Fatal编程技术网

Ruby on rails Rspec和Draper:类名上的单位化常量

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 然

在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
然后我测试

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/*