Я тестирую сайт Ruby Rails и хочу начать работу с Unit и Functional testing.
Каков наилучший способ начать модульное и функциональное тестирование сайта Ruby Rails?
Ответ 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 для простого факта, что приложение никогда не заканчивается. Вы захотите добавить функции и код рефакторинга. Получение правильной тестовой привычки на ранней стадии поможет сделать эти изменения менее болезненными.