以下代码无法在OS X上的ruby 2.1中编译。错误消息非常奇怪:
/Library/Ruby/Gems/2.0.0/gems/rake-10.3.2/lib/rake/rake_test_loader.rb:10:in `require':
/Users/jayunit100/Development/leitmotif/test/test_leitmotif.rb:21:
syntax error, unexpected keyword_end, expecting end-of-input (SyntaxError)
也就是说,它请求我从类中删除最后的"end"语句,当我这样做时,它确实编译了!所以我的第一个问题是,rake_test_loader是如何或为什么想要一个没有结束块的类声明的。
require 'helper'
require 'minitest/autorun'
class TestLeitmotif < MiniTest::Test
### A simple test
context "Leitmotif core tests" do
setup do
@lm = Leitmotif.new
end
should "run should return 1 if arguments are invalid"
@lm=Leitmotif.new
print("nASDFn")
print(@lz.inspect);
print(@lm.inspect)
print("nASDFn")
x=@lm.run("","")
#assert_equal 1, x
end
end
end
我的第二个问题是变量
@lm = Leimotif.new
在设置块中声明的,在should方法中似乎是不可访问的。
我在这里的怀疑是,在当前版本的ruby中,应该框架的语法没有被正确解析,但我对ruby很陌生,所以任何见解都将不胜感激。
谢谢!
此错误是因为在传递给should
的块的开头缺少do
。
should "run should return 1 if arguments are invalid" do
@lm=Leitmotif.new
print("nASDFn")
print(@lz.inspect);
print(@lm.inspect)
print("nASDFn")
x=@lm.run("","")
#assert_equal 1, x
end
Minitest上should的大多数实现只是将Minitest Spec DSL的it
别名为should
,因此这些文档应该会有所帮助。