我尝试使用rake test
的Spec语法运行Minitest,得到以下错误:
/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
我的剧本。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语法相关的内容?
2条答案
按热度按时间xeufq47z1#
MyGem::OptionParser
未在测试中加载。你需要在spec文件中要求它,或者创建一个spec_helper,在这里你需要所有测试中需要的所有文件,所以你只需要在spec中输入require 'spec_helper'
。此外,由于您使用的是spec语法,因此必须“require”minitest/spec“。你的spec_helper看起来像这样:
对你的Rakefile这样做,这样你就可以像上面那样在你的规范中做
require 'script'
,而不是做require_relative '../lib/script'
。最后,为了使规范正常工作,在script_spec文件的顶部添加
require 'spec_helper
'。你必须对所有的spec文件都这样做,并确保为你需要加载到spec_helper文件中的所有文件添加require。因为你也在做规范风格的测试,你可能想把你的测试改为:
您也可以在'spec_helper'文件中包含这样的代码,以自动加载lib文件夹中的所有文件:
希望这对你有帮助!
c9x0cxw02#
升级到minitest 5.19.0未初始化常量MiniTest(NameError)后,我们收到此错误。Minitest
Minitest 5.19.0默认情况下删除了MiniTest类加载,只有在添加MT_COMPAT变量时才加载,否则我们需要将MiniTest更改为Minitest
https://my.diffend.io/gems/minitest/5.18.1/5.19.0