Обычно тесты должны быть изолированы друг от друга;если во многих ваших тестах нужно делать одно и то же, это говорит о том, что они дублируют какую-то работу.Но иногда это неизбежно - вам часто нужно, чтобы вошедший в систему пользователь был под рукой, например, для проверки аутентифицированных вещей.
Особенно в случае тестирования на Ruby очень высоки шансы, что кто-то уже написалбиблиотека для решения конкретной проблемы, которую вы хотите.Например, очень часто требуется, чтобы некоторые данные существовали до того, как операция может быть должным образом протестирована, и именно поэтому factory_girl существует.
Если вы хотите сделатьповеденческое интеграционное тестирование, которое проходит через все шаги, которые на самом деле делает пользователь, вместо этого вы должны использовать огурец .
Если вы хотите повторно использовать методы в разных местахВы можете поместить общий код в spec/support
:
# spec/support/consumable_helper.rb
module ConsumableHelper
def consume(consumable)
calories = consumable.om_nom_nom
end
end
RSpec.configure do |config|
config.include ConsumableHelper
end
Если вы хотите протестировать одинаковое поведение в нескольких областях, используйте shared_examples_for
и it_behaves_like
:
shared_examples_for "a Consumable" do
it "should be delicious" do
subject.should be_delicious
end
it "should provide nutrition" do
subject.calories.should > 0
end
end
describe Fruit do
it_behaves_like "a Consumable"
end
describe Meat do
it_behaves_like "a Consumable"
end