我正在尝试使用Spec语法运行Minitestrake test
并出现以下错误:
/path/to/gem/spec/script_spec.rb:3:in `<top (required)>': uninitialized constant MyGem (NameError)
我的Rakefile:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.test_files = FileList['spec/*_spec.rb']
end
我的文件结构:
gem/
--lib/
----script.rb
--spec/
----script_spec.rb
--Rakefile
我的script.rb:
module MyGem
class OptionParser
def self.option?(arg)
arg =~ /^-{1,2}\w+$/
end
end
end
在script_spec.rb中使用Minitest :: Spec语法:
require "minitest/autorun"
describe MyGem::OptionParser do
describe "option?" do
it "must be true for option name" do
OptionParser.option?('--nocolor').assert true
end
end
end
我如何解决它?也许lib
文件夹未加载?我会错过与Spec语法相关的内容吗?
MyGem::OptionParser
未加载到您的测试中。您要么需要在规范文件中要求它,要么创建一个spec_helper,在其中您需要所有测试中需要的所有文件,因此您只需要require 'spec_helper'
在规范中就可以。
另外,由于您使用的是spec语法,因此您将需要`minitest / spec'。您的spec_helper如下所示:
# spec/spec_helper.rb
require 'minitest/spec'
require 'minitest/autorun'
require 'script'
然后对您的Rakefile执行此操作,这样您就可以require 'script'
像上面那样在规范中这样做,而不是这样做require_relative '../lib/script'
。
require 'rake/testtask'
Rake::TestTask.new do |t|
t.test_files = FileList['spec/*_spec.rb']
end
最后,为了使规范require 'spec_helper
生效,请在script_spec文件顶部添加'。您必须对所有规格文件执行此操作,并确保将规格中需要加载的所有文件的require添加到spec_helper文件中。
由于您还在进行规范样式的测试,因此您可能需要将测试更改为此:
MyGem::OptionParser.option?('--nocolor').must_equal true
您还可以在“ spec_helper”文件中包含如下代码,以自动加载lib文件夹中的所有文件:
Dir["../lib/**/*.rb"].each do |rb_file|
require rb_file
end
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句