Какова реальная разница между shared_examples
и shared_context
?
Мои наблюдения:
-
Я могу тестировать одни и те же вещи, используя оба (т.е. с
shared_examples
илиshared_context
) -
Но некоторые из моих других тестов терпят неудачу, если я использую более поздние версии.
Наблюдение # 1:
Я сравнил shared_examples и shared_context в документации по < а2 >
Синтаксические различия:
- shared_context для определения блока, который будет оцениваться в контексте групп примеров путем неявного соответствия метаданных
Пример:
shared_context "shared stuff", :a => :b do
...
end
- Способ их включения или вызова из тестового файла
shared_examples
include_examples "name" # include the examples in the current context
it_behaves_like "name" # include the examples in a nested context
it_should_behave_like "name" # include the examples in a nested context
shared_context
include_context "shared stuff"
Наблюдение # 2
У меня есть тестовый пример
shared_context 'limit_articles' do |factory_name|
before do
@account = create(:account)
end
it 'should restrict 3rd article' do
create_list(factory_name, 3, account: @account)
article4 = build(factory_name, account: @account)
article4.should be_invalid
end
it 'should allow 1st article' do
...
end
it 'should allow 2nd article' do
...
end
end
И включите контекст в файл спецификаций, в который уже включен один shared_context, а затем отсутствует. Но я меняю порядок, тогда все мои тестовые проходы
Сбой
include_context 'existing_shared_context'
include_context 'limit_articles'
Также, если я заменил shared_context
на shared_examples
и соответственно включил его в тестовый файл.
Пропуска
include_context 'existing_shared_context'
it_behaves_like 'limit_articles'