应该是上下文和语法,ruby 2.1

时间:2014-11-08 15:48:13

标签: minitest shoulda ruby-2.1

以下代码在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)

也就是说,它要求我删除最终的"结束"来自班级的陈述,当我这样做时,它的确汇编了!所以我的第一个问题是,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")
                x=@lm.run("","")
                #assert_equal 1, x
            end
    end
end

我的第二个问题是变量

@lm = Leimotif.new

should 方法中似乎无法访问设置块中声明的内容。

我怀疑在某种程度上,在当前版本的ruby中没有正确解析should框架的语法,但对ruby来说这是一个新手,所以任何见解都会受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

此错误是因为您在传递给do的块的开头缺少should

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")
  x=@lm.run("","")
  #assert_equal 1, x
end

Minitest上的大多数shoulda实现只是将Minitest Spec DSL's it替换为should,因此这些文档应该有所帮助。