Мне нравится практиковаться вне разработки, где мы начинаем с написания приемочных тестов, а затем углубляемся в модульные тесты для обработки предметной логики.Давайте рассмотрим создание учетной записи в качестве примера.
Начнем с написания истории о огурцах для нужной функции.Например:
Feature: Create an account
In order to use the application
As a user
I want to create an account
Scenario: Create an account from home page
Given I am on the home page
When I follow "Sign up"
And I fill in "Username" with "bob"
And I fill in "Password" with "test123"
And I press "Create"
Then I should see "You have successfully signed up! You may now sign in."
Когда мы запускаем наши функции Cucumber с помощью команды cucumber features
, первый шаг в сценарии завершится неудачей, поскольку домашняя страница еще не существует.Чтобы создать его, мы можем рассмотреть его как отдельную функцию.Поэтому мы могли бы написать другую функцию Cucumber, например:
Scenario: Visitor visits the home page
When I go to the home page
Then I should see "Welcome to the Website of Awesomeness"
Запустив эту функцию, мы обнаружим, что в приложении Rails не определен корневой маршрут.Как только мы исправим эту проблему, нам понадобится контроллер, представление и текст в представлении.Пока что мы написали только тесты на огурец.
Как только все эти функции пройдут, мы понимаем, что имя пользователя должно быть обязательным.Мы можем написать шаг Cucumber для проверки этого случая:
Scenario: Username must be filled out
Given I am on the home page
When I follow "Sign up"
And I fill in "Password" with "test123"
And I press "Create"
Then I should see "Username cannot be blank."
Чтобы реализовать это, мы должны добавить проверку в нашу модель, которая будет проверять включение имени пользователя. Теперь перейдем к модульному тестированию, потому что мы модифицируем доменную логику. Как правило, когда вы модифицируете модель, вы должны перейти в RSpec или Test :: Unit и протестировать эту модификацию напрямую.Например, используя RSpec, мы добавили бы спецификацию, чтобы гарантировать наличие имен пользователей (и уникальных, и т. Д.).Как только этот тест пройден, наш сценарий также должен начать проходить.
Это было многословно, но оно должно помочь вам начать практиковать BDD очень реальным способом.Для получения дополнительной информации см. Книгу RSpec (которая включает в себя множество информации о внешних методах использования Cucumber и RSpec): http://www.pragprog.com/titles/achbd/the-rspec-book