2014-11-08 8 views
0

Следующий код не компилируется в рубин 2.1 на OS X. Сообщение об ошибке довольно странно:Shoulda контекст и синтаксис, рубин 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("\nASDF\n") 
       print(@lz.inspect); 
       print(@lm.inspect) 
       print("\nASDF\n") 
       [email protected]("","") 
       #assert_equal 1, x 
      end 
    end 
end 

Моя вторая проблема здесь состоит в том, что переменная

@lm = Leimotif.new 

который объявлен в блоке настройки, кажется, недоступны в методе должен.

Мое подозрение здесь в том, что как-то синтаксис структуры if не корректно анализируется в текущей версии ruby, но я совершенно новый для ruby, поэтому любое понимание будет оценено.

Спасибо!

+0

Это либо опечатка, либо непонимание синтаксиса блока Ruby. Причина, по которой удаляются работы 'end', заключается в том, что вы делаете все, что хотите, чтобы быть в блоке' should' на уровне класса. –

ответ

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") 
    [email protected]("","") 
    #assert_equal 1, x 
end 

Большинство реализаций Shoulda на MiniTest просто псевдоним использует Minitest Spec DSL's it для should, поэтому эти документы должны помочь.

 Смежные вопросы

  • Нет связанных вопросов^_^