Rspec 和 Draper:class 名称上的未初始化常量
Rspec and Draper : unitialized constant on class name
在 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
这是因为装饰器规范是在文件顶部使用 require 'spec_helper'
而不是 require 'rails_helper'
生成的。当您 运行 其他规格 在 装饰器规格之前(例如,控制器规格,当 运行 宁 rspec spec/
时,因为 c 在 d 之前),然后他们最终会在您的装饰器规格达到 运行 之前要求正确的文件,所以一切都很好。
解决方案是在装饰器规范中将 spec_helper 要求替换为 rails_helper:
perl -pi -e 's/spec_helper/rails_helper/' spec/decorators/*
一旦你这样做,你应该没有问题 运行宁 rspec spec/decorators
。
N.B.: This change已经在draper repo中制作了,但是是在gem的2.1.0版本发布之后制作的,是最新的非gem 预发布。
在 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
这是因为装饰器规范是在文件顶部使用 require 'spec_helper'
而不是 require 'rails_helper'
生成的。当您 运行 其他规格 在 装饰器规格之前(例如,控制器规格,当 运行 宁 rspec spec/
时,因为 c 在 d 之前),然后他们最终会在您的装饰器规格达到 运行 之前要求正确的文件,所以一切都很好。
解决方案是在装饰器规范中将 spec_helper 要求替换为 rails_helper:
perl -pi -e 's/spec_helper/rails_helper/' spec/decorators/*
一旦你这样做,你应该没有问题 运行宁 rspec spec/decorators
。
N.B.: This change已经在draper repo中制作了,但是是在gem的2.1.0版本发布之后制作的,是最新的非gem 预发布。