В чем разница между shared_examples
и shared_context
?rspec общие примеры vs общий контекст
Мои наблюдения:
Я могу испытать те же вещи, используя оба (т.е. с
shared_examples
илиshared_context
)Но некоторые из моих других тестов терпит неудачу, если я использую позже.
Наблюдение № 1:
Я сравнил shared_examples и shared_context за документацией на https://www.relishapp.com/
синтаксических различий:
- 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'
Следующие страницы из 'rspec' документации должны сказать вам свои цели: [' Общий examples'] (https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/example-groups/shared-examples), ['Shared context'] (https://www.relishapp.com/rspec/rspec-core/v/2-11/docs/example-groups/shared-context) – vee
Я обновил свой вопрос примерами и подробными наблюдениями. – swapab
Наблюдение 2 содержит тесты. Это должна быть общая группа примеров. Это просто читаемость в ваших тестах. – Jon