2010-09-28 12 views
23

RSpec pozwala uzyskać aktualną testowy działa nazwę metody w sposób wcześniej (: każdy) blok, wykonując następujące czynności:Uzyskanie pełnej rspec nazwę testu z poziomu przed (: każdy) blokują

Spec::Runner.configure do |config| 
    config.before :each do |x| 
    x.method_name # returns 'should be cool' 
    end 
end 

to jest dla testu jak:

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') 

describe 'Hello world' do 
    it 'should be cool' do 
    # test code 
    end 
end 

byłoby możliwe, aby uzyskać całą nazwę testu z co to opisywanie, (aka „Hello World powinna być cool”) w przed blokiem?

Odpowiedz

19

W RSpec 2.0 można użyć (nie jestem pewien, czy jest to najlepszy sposób, ale działa)

x.example.metadata[:example_group][:full_description] 

Jak dla RSpec 1.X nie wiem. I to jest prawdopodobnie to, o co prosisz ...

11

Znalazłem odpowiedź. Okazuje się, że była tam metoda o nazwie full_description na x, która robiłaby dokładnie to, co chcę, ale była przestarzała. Poniższa wytwarza ciąg chcę:

"#{x.class.description} #{x.description}" 

Reference

+3

'x.class.description' nie działa w RSpec 2.13 – szeryf

+0

' x.example.metadata [: description_args] .join (',') ' – omarshammas

+1

https://www.relishapp.com/rspec/rspec-core/ v/3-4/docs/metadata/current-example <- dokumenty wyjaśniające prawidłowy sposób wykonania tej czynności. – Urkle

6

lub można użyć metod bezpośrednio:

x.example.description 
x.example.file_path 

itp

+0

spróbuj także: opisany_class – ajahongir

+0

Działa to w RSpec 2.13 (z wyjątkiem tego, że jest to klasa "x.described_class", a nie "x.example.described_class", tak jak początkowo sądziłem). – szeryf

1

na rspec 2.12.0 działa "#{x.class.description} #{x.example.description}"

0

Możesz pobrać plik, jak również. Kiedyś to wyśledzić problemy z moich poltergeist specyfikacji:

config.before(:each, js: true) do |s| 
    md = s.example.metadata 
    x = md[:example_group] 
    Rails.logger.debug "==>>> #{x[:file_path]}:#{x[:line_number]} #{md[:description_args]}" 
    end 

pamiętać, że jest to liczba linii w grupie badanej (nie tak użyteczne), ale opis bieżącego przykładu, który powinien pomóc określić, które jeden jest uruchomiony.

== >>> ./spec/features/editing_profiles_spec.rb:3 [ "użytkownik edytuje profilu"]

7

Z rspec 3.3 to działa tak:

RSpec.configure do |config| 
    config.before :example do |x| 
    Rails.logger.debug("=== running spec example #{x.metadata[:full_description].inspect}") 
    end 
end 
Powiązane problemy