Причина, по которой то, что мы теперь знаем как характеристики спецификации и спецификации запроса, разделяется на отдельные каталоги, обозначается в this blog post.
В целом, однако, разделив их было сделано в Капибара 2.0, чтобы облегчить путаницу иметь один вид спецификации, то request
спецификации, отвечает за выполнение тестов интеграции полный стек , а также спецификации высокого уровня который будет управлять приложением только с использованием его внешнего интерфейса (обычно это делается через безгласный веб-браузер). Таким образом, в настоящее время в целом согласованной структуры спецификации будет:
- Положите что-нибудь, что использует водосвинка DSL (
visit
и т.д.), чтобы утверждать на page
объекта в spec/features
- Put полный стек спецификации без контроллера, что использовать стойку DSL (
get
и т.д.), чтобы утверждать на response
объекта в spec/requests
это, вероятно, лучше не смешивает два, если вы можете, несмотря на то, что это возможно, если ни по какой другой причине, чем держать с конвенцией и дать вашему будущему коллеге меньше сюрпризов.
Что касается почему вы можете совместно смешаться спецификации, если вы хотите, это в основном связано с конфигурацией RSpec, поэтому поддерживается поведение:
- Вы, вероятно, имеют линию
config.infer_spec_type_from_file_location!
в вашем rails_helper.rb
где-нибудь, что означает, что RSpec рассмотрит любые файлы в spec/features
быть полнометражных спецификации и любые файлы в spec/requests
быть запрос спецификации
- Поэтому, даже если вы обернуть
type: :request
флага вокруг спецификации в папке spec/features
, следовательно, дает, что доступ к одной спецификации к Rack DSL, он будет еще имеет доступ к Capybara DSL
Вы можете даже использовать RSpec.config
, чтобы позволить водосвинке DSL в любой тип спецификации или путь к каталогу, вы хотите, хотя это not recommended:
RSpec.configure do |config|
config.include Capybara::DSL, type: :request
config.include Capybara::DSL, file_path: %r{spec/requests}
end
в целом, хотя, ради вашего кодовую, будущем вы, и ваши будущие коллеги, это, вероятно, лучше, чтобы попытаться сохранить все в нужном месте ,
Спасибо за отличную информацию. – CodeSmith