Правильный способ тестирования сценариев с огурцом (рельсы 2.3.8) - PullRequest
2 голосов
/ 14 декабря 2010

Итак, я начинаю создавать новое приложение, мое первое большое приложение в рельсах после перехода с .net.

Я действительно хочу BDD всего приложения, поэтому у меня есть огурец все готово и готов к работе.

Я написал более пары тестов для простых вещей (удаление, добавление, обновление) и так далее, но теперь я застрял, пытаясь понять, как протестировать этот сценарий.

У меня есть эти модели Пользователь, Аккаунт, План у каждой учетной записи есть план, планы оплачиваются каждый месяц (в тот же день, когда была создана учетная запись).

Я хочу проверить выбор плана, создать учетную запись, проверить процесс выставления счетов (даже макет, без PayPal на данный момент).

Я был бы признателен за помощь в этом, просто чтобы подчеркнуть, я не ищу полный код, просто объяснение того, как (в концепции) вы бы пошли и протестировали это.

Кроме того, план можно обновлять и понижать, поэтому я тоже хочу это проверить.

Заранее спасибо за помощь

1 Ответ

3 голосов
/ 14 декабря 2010

Мне нравится практиковаться вне разработки, где мы начинаем с написания приемочных тестов, а затем углубляемся в модульные тесты для обработки предметной логики.Давайте рассмотрим создание учетной записи в качестве примера.

Начнем с написания истории о огурцах для нужной функции.Например:

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

...