Каков наилучший способ начать модульное и функциональное тестирование сайта Ruby Rails?

Я тестирую сайт Ruby Rails и хочу начать работу с Unit и Functional testing.

Ответ 1

Cucumber и RSpec стоит посмотреть. Они поощряют тестирование в behaviour-driven, примерном стиле.

RSpec - это библиотека для тестирования на уровне единицы:

describe "hello_world"
  it "should say hello to the world" do
    # RSpec comes with its own mock-object framework built in,
    # though it lets you use others if you prefer
    world = mock("World", :population => 6e9)
    world.should_receive(:hello)
    hello_world(world)
  end
end

Он имеет специальную поддержку Rails (например, он может изолировать модели, представления и контроллеры) и может заменить механизмы тестирования, встроенные в Rails.

Огурец (ранее известный как Runner Runner) позволяет писать высокоуровневые приемочные тесты на (довольно) простом английском языке, которые вы могли бы показать (и согласиться) с клиентом, а затем запустить их:

Story: Commenting on articles

  As a visitor to the blog
  I want to post comments on articles
  So that I can have my 15 minutes of fame

  Scenario: Post a new comment

    Given I am viewing an article
    When I add a comment "Me too!"
    And I fill in the CAPTCHA correctly
    Then I should see a comment "Me too!"

Ответ 2

Моя рекомендация (серьезно) просто обойти встроенные элементы/функциональное тестирование рельсов и перейти прямо к RSpec.

Встроенный материал rails использует фреймворк Test::Unit, который поставляется с ruby, и который является более или менее прямым портом JUnit/NUnit/AnyOtherUnit.
Я нашел эти рамки довольно утомительными и раздражающими, что привело к общей апатии о написании модульных тестов, что явно не то, что вы пытаетесь достичь здесь.

RSpec - это другой зверь, сосредоточенный вокруг описания того, что должен делать ваш код, а не утверждение того, что он уже делает. Это изменит ваше восприятие тестирования, и вам будет гораздо интереснее делать это.

Если я буду похож на какого-нибудь фанатика, это только потому, что я действительно верю, что RSpec это хорошо. Я испугался и устал от модульного/функционального тестирования, верного сторонника в этом, в значительной степени исключительно из-за rspec.

Ответ 3

Похоже, вы уже записали свое приложение, поэтому я не уверен, что вы получите огромный бонус от использования RSpec over Test::Unit.

Во всяком случае, независимо от того, какой из них вы выберете, вы быстро столкнетесь с другой проблемой: управление светильниками и mocks (т.е. ваши тестовые "данные" ). Итак, взгляните на Shoulda и Factory Девушка.

Ответ 4

Вы также можете проверить веб-интерфейс с помощью плагина Firefox, такого как http://selenium.openqa.org/

Он будет записывать клики и текстовую запись, а затем воспроизводится и проверяет страницу на правильные элементы отображения.

Ответ 5

Даже если приложение уже написано, я бы рекомендовал использовать RSpec через Test:: Unit для простого факта, что приложение никогда не заканчивается. Вы захотите добавить функции и код рефакторинга. Получение правильной тестовой привычки на ранней стадии поможет сделать эти изменения менее болезненными.