Вы говорите о BDD с точки зрения тестирования пользовательского интерфейса на высоком уровне. На этом уровне тестирование немного более пушистое, чем ниже, в коде на стороне Javascript/сервера.
В нескольких книгах по TDD, которые я читал, говорится, что вы должны писать код так, как будто базовые системы существуют, и просто написать достаточно, чтобы тест прошел. Вы можете написать заглушки на сервере, чтобы поведенческие тесты пользовательского интерфейса прошли. Затем вы начинаете с этой заглушки и пишете несколько модульных тестов для кода на стороне сервера и работаете до полной реализации.
Я часто пишу код так, как будто существуют нижележащие уровни, чтобы тест высокого уровня прошел, это действительно похоже на спуск в кроличью нору и извлечение множества других классов для удовлетворения теста высокого уровня, а затем написание тестов для этих более низких уровней. Как вы уже поняли, это помогает сосредоточиться, начиная с тестов более высокого уровня.
Как известно любому опытному программисту, в разработке программного обеспечения есть много уровней. Я обычно работаю ниже пользовательского интерфейса и думаю о данных или поведении, которые нужны моему пользовательскому интерфейсу от сервера, и начинаю с этого (возможно, потому, что я не так много работаю над пользовательским интерфейсом в наши дни).
Если быть честным, извлечение класса из нижележащих слоев означает, что я не делаю сначала тесты, но ... в течение нескольких минут, а иногда и часов у меня будет тест для этого кода. Мне это все еще кажется полезным, поскольку я могу увидеть, где вам может понадобиться поставить зависимости для класса и соблюсти принцип единой ответственности - если его трудно тестировать, значит, вы делаете слишком много в одном месте и т.д.
Рекомендую посмотреть эти видео для лучшего погружения в вопрос: