2014-11-08 100 views
0

下面的代码不红宝石2.1编译在OS X上的错误信息是很奇怪:早该语境和语法,红宝石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) 

也就是说,它正在请求我删除最后的“最终“的声明,当我这样做,它确实编译!所以我的第一个问题是,如何或为何那就是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("\nASDF\n") 
       print(@lz.inspect); 
       print(@lm.inspect) 
       print("\nASDF\n") 
       [email protected]("","") 
       #assert_equal 1, x 
      end 
    end 
end 

我的第二个问题,这里是变量

@lm = Leimotif.new 
这是在安装块中声明

,似乎是在应该方法无法访问。

我在这里的怀疑是的框架应该不会在红宝石的当前版本正确解析,但很新的红宝石莫名其妙的语法,因此任何见解将不胜感激。

谢谢!

+0

这可能是一个错字或Ruby的块的语法的误解。究其原因除去了'end'工作是因为你然后做你的意思是在类级别的'should'块的东西。 – 2014-11-10 14:46:49

回答

0

这个错误是因为你在传递给should块的开始丢失了的do。早该对MINITEST

should "run should return 1 if arguments are invalid" do 
    @lm=Leitmotif.new 
    print("\nASDF\n") 
    print(@lz.inspect); 
    print(@lm.inspect) 
    print("\nASDF\n") 
    [email protected]("","") 
    #assert_equal 1, x 
end 

大多数实现简单的别名Minitest Spec DSL's itshould,所以这些文档应该有所帮助。