2013-03-20 9 views
5

Mam błędów w serwerze Jenkins:Ruby udoskonalenia nie działa serwer CI

$ ruby -v 
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux] 

Uruchamiając rspec, mam następujący błąd:

undefined method `using' for #<Class:0x000000026f9c88> (NoMethodError) 

dokładnie ten sam kod działa na mój lokalny komputer z ruby2. Oto moja wersja: ruby 2.0.0dev (2012-12-01 trunk 38126) [x86_64-linux] Działa również na irb. Wygląda na to, że ruby ​​nie rozpoznaje oświadczenia podczas uruchamiania skryptu.

Oto kod:

describe "blah" do 
    include TestHelper 
    using TestHelper::BrowserRefinement 
    ... 
end 

wyjaśnienie: wyrafinowanie jest zdefiniowana w innym pliku. Biczuję interwebs, aby sprawdzić, czy istnieje różnica między wersjami r39474 i r38126.

+0

jeśli włożysz 'stawia RUBY_VERSION', co będzie RSpec druku? –

+0

Pokazuje odpowiednią wersję: 2.0.0 –

Odpowiedz

8

W bieżącej wersji Ruby 2.0 (2.0.0p0), using jest metodą instancji obiektu najwyższego poziomu main, a nie z Module. I to prywatna metoda. Jeśli wywołasz go w definicji klasy/modułu lub definicji metody, wywoływany jest RuntimeError.

„Zakres udoskonalenia aktywowane przez main.using jest z punktu tuż po main.using wywoływane jest na końcu pliku, w którym main.using jest wywoływany. Jednak, gdy main.using wywoływana jest w ciągu znaków podanego jako pierwszy argument Kernel#eval, Kernel#instance_eval lub Module#module_eval, koniec zakresu jest końcem ciągu znaków. "

Możesz przeczytać więcej na ten temat w Refinements Specification.

Dla przypadków testowych można je zapisać za pomocą eval i przekazać powiązania najwyższego poziomu, takie jak test cases w źródle ruby.

Udoskonalenia jest wciąż eksperymentalna funkcja, to może się zmienić w przyszłości :-)

+0

FYI, zostało to zmienione w Ruby 2.1, 'using' może być używane nawet w' Module' (a więc również 'Class'). –

Powiązane problemy