Подтвердить что ты не робот

Получение полного имени теста RSpec из блока before (: each)

RSpec позволяет вам получить текущее имя метода тестирования в блоке before (: each), выполнив следующие действия:

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

Это для теста типа:

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

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

Можно ли получить все тестовое имя с тем, что он описывает, (a.k.a. "Hello World должно быть круто" ) в переднем блоке?

4b9b3361

Ответ 1

В RSpec 2.0 вы можете использовать (я не уверен, что это лучший способ, но он работает)

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

Что касается RSpec 1.X, я не знаю. И это, вероятно, то, о чем вы просите...

Ответ 2

Я нашел ответ. Оказалось, что раньше использовался метод full_description на x, который бы сделал именно то, что я хочу, однако он устарел. Следующее создает строку, которую я хочу:

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

Ссылка

Ответ 3

С Rspec 3.3 он работает следующим образом:

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

Ответ 4

или вы можете напрямую использовать методы:

x.example.description
x.example.file_path

и др.

Ответ 5

С последней версией rspec начиная с (04/01/2014) это изменилось на

example.metadata[:description]

Оформить покупку https://github.com/rspec/rspec-core#metadata для получения дополнительной информации

Ответ 6

on rspec 2.12.0 "#{x.class.description} #{x.example.description}" работает

Ответ 7

Вы также можете получить файл. Я использовал это, чтобы отслеживать проблемы с моими полтергейстскими спецификациями:

  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

Обратите внимание, что это номер строки группы примеров (не очень полезный), но описание текущего примера, которое должно помочь вам определить, какой из них выполняется.

== → > ./spec/features/editing_profiles_spec.rb:3 [ "Пользователь редактирует профиль" ]

Ответ 8

Это работает в rspec 3.5

example.metadata[:full_description]

Более полный пример того, как получить к нему доступ:

  subject(:example_description) do |example|
    example.metadata[:full_description]
  end