Автоматизация тестирования в RoR

D83b63db79b42978fe35e120550ca180?s=47 Anton Kaliaev
September 29, 2012

Автоматизация тестирования в RoR

В рамках данного доклада я расскажу об истории тестирования и его будущем. Также будут рассмотрены основные библиотеки (гемы), активно используемые при тестировании приложений, написанных на Ruby и Ruby on Rails.

D83b63db79b42978fe35e120550ca180?s=128

Anton Kaliaev

September 29, 2012
Tweet

Transcript

  1. 4.

    → рефакторинг без страха → уменьшение стоимости внесения изменений →

    документирование кода → … → хороший сон → счастливый брак
  2. 7.

    1980 2000 2012 Юнит-тесты с использованием Job Control Language (JCL)

    Программирова ние мейнфреймов IBM
  3. 8.

    1980 2000 2012 //IS198CPY JOB (IS198T30500),'COPY JOB',CLASS=L,MSGCLASS=X //COPY01 EXEC PGM=IEBGENER

    //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=IS198.TEST.INPUT,DISP=SHR //SYSUT2 DD DSN=IS198.TEST.OUTPUT, // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(40,5),RLSE), // DCB=(LRECL=115,BLKSIZE=0), // DATACLAS=SEQFB //SYSIN DD DUMMY // Копирование одного набора данных в другой на JCL
  4. 14.

    1980 2000 2012 Ruby + Ruby on Rails Встроенные юнит,

    функциональные и интеграционные тесты
  5. 18.

    class TestSomething < Test::Unit::TestCase def test_foo foo = Foo.new assert

    foo bar = nil assert_nil bar assert_equal true, false end end
  6. 20.

    DSL для тестирования поведения системы “RSpec is testing tool for

    the Ruby programming language. Born under the banner of BDD, it is designed to make TDD a productive and enjoyable”
  7. 22.

    describe WidgetsController do describe "GET index" do it "assigns all

    widgets to @widgets" do widget = create(:widget) get :index assigns(:widgets).should eq([widget]) end end end
  8. 24.

    describe Article do describe ".recent" do it "includes articles published

    less than one week ago" do article = create(:article, published_at: Date.today - 1.week + 1.second) Article.recent.should eq([article]) end it "excludes articles published at midnight one week ago" do article = create(:article, published_at: Date.today - 1.week) Article.recent.should be_empty end end end
  9. 27.

    DSL для генерации объектов ActiveRecord “factory_girl is a fixtures replacement

    with a straightforward definition syntax, support for multiple build strategies, and support for multiple factories for the same class, including factory inheritance.”
  10. 28.

    require 'factory_girl‘ FactoryGirl.define do factory :user do name 'John Doe'

    date_of_birth { 21.years.ago } end end user = build(:user) user = create(:user) attrs = attributes_for(:user)
  11. 29.
  12. 34.

    отслеживание изменений в системе и не только “Guard is a

    command line tool to easily handle events on file system modifications.”
  13. 35.

    → визуальная нотификация → перезапуск тестов при изменении → рестарт

    веб-сервера → Перекомпиляция Coffeescript и/или SCSS → Запуск shell команд при изменении
  14. 37.
  15. 40.

    Функционал: Авторизация в системе Чтобы иметь возможность выполнять бизнесс операции,

    пользователь должен авторизоваться Сценарий: пользователь авторизуется в системе как работник Допустим "Сергей" является работником Если он заходит на страницу авторизации работника И вводит в поле "Email" свой email И вводит в поле "Пароль" свой пароль И нажимает "Войти" Тогда он должен быть на странице списка компаний
  16. 43.

    симулирует действия браузера “Capybara helps you test Rails and Rack

    applications by simulating how a real user would interact with your app. It is agnostic about the driver running your tests and comes with Rack::Test and Selenium support built in.”
  17. 45.

    Допустим /^"(.*?)" является работником$/ do |first_name| Employee.create(first_name: first_name, last_name: 'Иванов',

    email: 'test@test.ru', password: '54321') end Если /^он заходит на страницу авторизации работника$/ do visit new_employee_session_path end Если /^вводит в поле "([^"]*)" свой email$/ do |email| fill_in(email, :with => 'test@test.ru') end Если /^нажимает "(.*)"$/ do |button| click_button(button) end Тогда /^он должен быть на странице списка компаний$/ do current_path == employee_companies_path end
  18. 47.

    аналог RSpec для Javascript “Jasmine is a behavior-driven development framework

    for testing JavaScript code. It does not depend on any other JavaScript frameworks.”
  19. 51.

    1. Top 12 Reasons to Write Unit Tests http://onjava.com/pub/a/onjava/2003/04/02/javaxpckbk.html 2.

    Guard plugins https://rubygems.org/search?query=guard- Ссылки: