Pull to refresh
  • by relevance
  • by date
  • by rating

Экстремальное программирование, знакомство с Behavior Driven Development и RSpec

IT systems testing *

Теория


Для начала, давайте разберемся, что же такое Behavior Driven Development(в дальнейшем BDD) и чем данная техника отличается от Test-Driven Development(в дальнейшем TDD)

Разрабо́тка че́рез тести́рование (англ. test-driven development) — техника программирования, при которой модульные тесты для программы или её фрагмента пишутся до самой программы (англ. test-first development) и, по существу, управляют её разработкой. Является одной из основных практик экстремального программирования.
Читать дальше →
Total votes 65: ↑55 and ↓10 +45
Views 39K
Comments 36

RSpec. Часть #1: создаем тесты для модели

Ruby on Rails *
Как и обещал, я начинаю цикл статей, на тему RSpec.

В этой статье, я постараюсь, подробно рассказать, как писать тесты для моделей в Ruby on Rails. Если вы уже знакомы с rspec_on_rails, поправьте и дополните меня, если что то не так. Помните, что я изучаю Rspec вместе с вами и могу где то ошибаться.
Читать дальше →
Total votes 20: ↑16 and ↓4 +12
Views 35K
Comments 12

Пример практики BDD при работе со Specter Framework

.NET *
specter-log Specter – инфраструктура для составления объектно-поведенческих спецификаций для .NET. Он предоставляет возможности для обеспечения разработки, руководствуясь поведением системы (BDD), требуя от разработчиков написания исполняемой спецификации для объектов перед написанием самих объектов. Технически это ни чем не отличается от разработки по средствам тестирования (TDD), хотя различия в форме написания снимают психологический барьер для написания “тестов” для кода, которого ещё не существует. Есть множество проектов для различных платформ, реализующих данную идею (К примеру RSpec для Ruby, NSpec для .NET. Подробнее о средах здесь).
Specter использует возможности мета-программирования языка Boo (CLR .NET) для написания неплохо читаемых спецификаций.
Читать дальше →
Total votes 18: ↑15 and ↓3 +12
Views 2.2K
Comments 6

BDD/TDD — Учимся писать матчеры

Ruby *
Разработка, основанная на специфицировании поведения (BDD), — один из краеугольных камней философии Ruby.

Очень удачной реализацией BDD является всем знакомый RSpec. Одной из замечательных черт RSpec является его расширяемость.

Так, мы используем RSpec совместно с Factory Girl (хотя стоило бы перейти на Machinist), RR (прекрасный каркас для заглушек), Spork и недавно перешли с Shoulda на Remarkable.

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

Хорошим способом сделать это является создание нового «ожидателя» (matcher).

Читать дальше
Total votes 22: ↑18 and ↓4 +14
Views 3.8K
Comments 15

Rails: Хватит отмазываться, начинаем BDD-ить!

Website development *
Sandbox

Кто здесь?


Когда речь заходит о тестировании существующего продукта, а тем более о разработке чего-то нового на основе изначального написания сценариев использования, различных спецификаций и тестов, то частенько можно слышать подобные вещи:

11:24:21 PM Michael: ну хз, надо пробовать
11:24:24 PM Michael: наверное так лучше
11:24:27 PM Michael: даже я думаю наверняка
11:24:36 PM Michael: но пока меня че-то останавливает
11:24:38 PM Michael: лень наверное :)

Знакомо? «Не хочется разбираться? Нет времени?» Тогда читаем дальше. В статье расскажу, как настроить свое любимое рельсовое окружении на разработку с подходом BDD и начать новую жизнь (опционально).
Поехали!
Total votes 88: ↑77 and ↓11 +66
Views 31K
Comments 38

Aka rspeс, т.е. ленивые переменные в тестах

JavaScript *
Как говорится: «Запретный плод сладок», так и у меня. Попробовав однажды писать тесты на RSpec, хочется иметь декларативный BDD DSL в каждом языке. Вот например JavaScript, имеет аналоги mocha.js, jasmine.js, etc. Но нет, мало. Хочется не просто всяких describe-ов или it-ов, а еще и ленивых переменных, я имею в виду subject и let.

На первый взгляд глупо! Внутренний голос кричит «Зачем?», а совесть в ответ: «Чистый код — это важно! Ну а простые тесты — вообще мега важно!».

Вот так и родилась библиотека для mochajs, которая позволяет создавать ленивые переменные (aka let) и `subject`.

Для тех кто понимает о чем я и уже напрягся засветился от радости, милости просим на Github.
Всем остальным, а в особенности скептикам предлагаю заглянуть под cut.
Читать дальше →
Total votes 11: ↑10 and ↓1 +9
Views 3.7K
Comments 2

Rails custom Scaffolding

Ruby on Rails *

Наверное каждый в начале работы с ROR был впечатлен возможностью Scaffolding'а, который позволяет одной командой создавать migrations, controllers, models и views.

Но что делать если в своем проекте вы используете не стандартные Rails утилиты: erb, Test::Unit, fixturies, а сторонние инструменты: Haml, Rspec, Cucumber, Factory Girl и более того, хотите добавить собственные шаблоны?

Интересно? GOTO next line.

Исходные данные:
Ruby on Rails; Rspec; will-paginate; Haml; Factory-girl

Задача:
% rails generate scaffold post post:string
Генерирует:
  1. contoller's с поддержкой will_paginate, русскоязычными сообщениями
  2. model's с поддержкой will_paginate
  3. view's с заданным нами содержимым и в формате haml
  4. Rspec тесты, вместо Test::Unit
  5. Factory Girl factories вместо стандартных fixtures

Читать дальше →
Total votes 41: ↑38 and ↓3 +35
Views 24K
Comments 26

Как присоединить свой Ruby-проект к Travis и приготовить Мартини за 15 минут

Ruby *
Translation
image
Налицо тенденция, что каждый проект на Ruby присоединяется к Travis. Travis — очень простая, опенсурсная система непрерывной интеграции. Нам обычно лень подключать все свои проекты к автоматическому тестированию билдов. Travis позволяет сделать это за считанные минуты.

Это пошаговая инструкция, как присоединить свой проект к Travis и приготовить вкуснейший коктейль с Мартини примерно за 15 минут. Следует заметить, что на приготовление Мартини уйдет минут пять, так что часть про Travis займет 10 минут вашей жизни.

Читать дальше →
Total votes 43: ↑38 and ↓5 +33
Views 2.4K
Comments 16

Request spec in Action

Ruby on Rails *
Тестирование стало неотъемлемой частью любой разработки программного продукта, будь то приложение под настольный компьютер, мобильное устройство или web. Уже никто не отрицает важность это этапа и последствий, которые принесет его отсутствие. Среди них большое время на проверку каждого элемента (страницы), и неожиданные сюрпризы в поведении продукта, увеличение затрат на исправление программы. Принцип написания тестов достаточно прост – «желтый цвет», «красный цвет», «зеленый цвет», рефакторинг. Где желтый цвет – это не созданный тест (pending), красный цвет – не прошедший тест, а зеленый – системе работает как надо.

Для каждого вида программирования, существует множество типов тестирования. Но есть и общие моменты, присутствующие везде. Так как основной род моей работы является создание web приложений под ROR, поговорим про особенности тестирования данных приложений.

Читать дальше →
Total votes 9: ↑7 and ↓2 +5
Views 5.5K
Comments 17

Создание гемов — Руководство

Ruby *
Хотя на Хабре уже проскакивали статьи о создании гемов, они либо содержат устаревшую, либо неполную информацию.

Как же на самом деле надо создавать, развивать и публиковать свои гемы?

Современный подход заключается в использовании Bundler совместно с другими инструментами, такими, как Git, YARD и RSpec-2.
Читать дальше →
Total votes 32: ↑29 and ↓3 +26
Views 8.8K
Comments 12

Page Object — путь к совершенным автотестам

WapStart corporate blog


Всем, доброго времени суток!
Этот топик о том как мы тестируем веб-интерфейс нашего продукта Plus1 WapStart. Мы используем Page Object, т.к. этот паттерн имеет много общего с реальными задачами и позволяет писать автотесты простыми для чтения и понимания.

Что такое Page Object


Page Object — это паттерн для реализации умных автоматических проверок. Gem page-object является имплементацией этого паттерна, который помогает в создании гибких страниц с объектами для тестирования браузерных приложений. Суть в том, чтобы создавать уровни абстракции для отделения тестов от предметов тестирования, и обеспечить простой интерфейс для элементов на странице. Gem работает с watir-webdriver и selenium-webdriver.
Читать дальше →
Total votes 20: ↑18 and ↓2 +16
Views 64K
Comments 8

Ruby NoName Podcast S04E06

Self Promo

Подкаст


Rpod

Новости


Errbit — opensource error catcher совместимый с Airbrake API
Ruby style guide
Jbuilder от DHH
GC in Ruby 2.0
Документация по Rails, Ruby-core и Ruby stdlib
Валидация на грани фола — статья на харбре про валидацию
23 марта вышел Factory Girl 3.0
17 марта вышел Rspec 2.9.0
Читать дальше →
Total votes 27: ↑20 and ↓7 +13
Views 515
Comments 11

Тестирование iOS-приложений

Development for iOS *TDD *
Sandbox
В этой статье я хочу рассказать о тестировании iOS приложений и небольшой автоматизации этого процесса.
Под катом будут рассмотрены инструменты для модульного и функционального тестирования и приведены простые примеры.
Читать дальше →
Total votes 37: ↑36 and ↓1 +35
Views 34K
Comments 14

Ruby NoName Podcast S04E12

Ruby *

Подкаст

http://ruby.rpod.ru/278465.html

Новости


Читать дальше →
Total votes 21: ↑19 and ↓2 +17
Views 1.1K
Comments 1

Watir WebDriver как средство автоматизации тестирования

REG.RU corporate blog IT systems testing *
Недавняя статья про WebDriver напомнила мне немного рассказать об используемом нами комплексе для автоматизации тестирования Web-приложений.

Итак, в основе тестов лежит лежит связка RSpec + Watir WebDriver (для Rails-приложений более уместно будет взглянуть в сторону Capybara). При поддержке Bundler и локальных WebDrivers осуществляется лёгкая инсталляция на рабочем месте тестировщика (установить Ruby 1.9, Rubygems, Bundler, и выполнить bundle install). Исходник Gemfile:

source :rubygems

gem "watir-webdriver", "~>0.6.1"
gem "rspec-core", "~> 2.0"
gem "rspec-expectations", "~> 2.0"
gem "rr", "~> 1.0"
gem "ci_reporter", "~> 1.7"


За счет гема ci_reporter осуществляется интеграция с Jenkins CI, а за счёт гема parallel_tests и Selenium Grid распараллеливание тестов (на сегодня parallel tests пока не используются в production).

Вот пример теста:

describe "FirstSite" do
  before(:all) do
    site! "first"
  end

  # returns true on success; otherwise false.
  def login_as(data)
    browser.rel_goto "/"
    browser.title.should include 'example.com'
    browser.text_field(:id => 'login').set data[:login]
    browser.text_field(:id => 'password').set data[:password]
    submit_button = browser.button(:id => 'submit')
    submit_button.click
    browser.url =~ %r{/welcome$}
  end

  def logout
    browser.rel_goto "/"
    browser.button(:id => 'logout').click
  end

  describe :login do
    auth = fixture :auth

    describe :successful do
      after(:each) do
        logout
      end

      auth.keys.select { |key| key.kind_of?(Symbol) }.each do |key|
        next  if key == :wrong

        it "Logging in as #{key} should be OK" do
          login_as(auth[key]).should be_true
        end
      end
    end

    describe :wrong do
      it "Logging in with wrong credentials should fail" do
        login_as(auth[:wrong]).should_not be_true
      end
    end
  end
end



Тестируемые сайты и способ тестирования определяются в настройках.
Читать дальше →
Total votes 15: ↑13 and ↓2 +11
Views 14K
Comments 14

Применение принципа DRY в RSpec

IT systems testing *Ruby *


DRY(Don’t Repeat Yourself) — один из краеугольных принципов современной разработки, а особенно в среде ruby-программистов. Но если при написании обычного кода повторяющиеся фрагменты обычно легко можно сгруппировать в методы или отдельные модули, то при написании тестов, где повторяющегося кода порой еще больше, это сделать не всегда просто. В данной статье содержится небольшой обзор средств решения подобных проблем при использовании BDD-фреймворка RSpec.
Читать дальше →
Total votes 34: ↑30 and ↓4 +26
Views 18K
Comments 17

Введение в TDD «на пальцах» (Rails + Rspec)

Ruby on Rails *
Лично для меня, довольно тертого разработчика, процесс внедрения TDD был непростым и местами тернистым.

Вкратце законспектирую, поскольку порог входа в тестирование действительно выше, чем просто сесть и писать код на RoR. Сделаю несколько, как написали бы пиндосы, highlights.
image

Теоретически процесс TDD должен выглядеть так:



1. Написали падающий тест, прогнали rspec, убедились что тест не проходит (красный)

2. Написали кусок кода, прогнали rspec, убедились что тест проходит (зеленый)

3. Отрефакторили, убедились что все хорошо и тесты не падают.

4. Отправили код в продакшн

Читать дальше →
Total votes 38: ↑28 and ↓10 +18
Views 43K
Comments 9

Хелпер авторизации Devise для использования с Capybara

Ruby on Rails *
При тестировании js интерфейса иногда возникает необходимость авторизации, ниже опишу очень простое и удобное решение.

Создаем файл spec/support/request_helpers.rb со следующим содержимым:

require 'spec_helper'
include Warden::Test::Helpers
 
module RequestHelper
 
  def create_current_user
    user = FactoryGirl.create :user
    login_as user, scope: :user
    user
  end
 
end

Читать дальше →
Total votes 11: ↑7 and ↓4 +3
Views 2.5K
Comments 0

Когда гаснет звезда: интервью с Джимом Вейрихом

Ruby *Programming *
Translation
От переводчика: Джим Вейрих — легендарная личность в Ruby-сообществе. К сожалению, он, как и все мы, смертен. Не так давно он покинул нас. Этот перевод — дань уважения к этому человеку, который немного изменил мир.

Я наслышан о Джиме достаточно давно: ведь он — автор утилиты rake, ставшей фактически стандартом де-факто среди рубистов. К моей большой удаче, я был в числе слушателей его выступления на GoRuCo 2012, на котором было рассказано о продвинутых возможностях rake. Помню, как меня поразила та ловкость и легкость, с которой Джим говорил на сложные темы. Позже, в том же году на конференции RubyConf я наблюдал еще одно его замечательное выступление, в котором объяснялись некоторые базовые принципы Лямбда-исчисления. Джим не только доступно объяснил эту не самую простую тему, но также не потерял своих слушателей по дороге.

Думаю, теперь вы понимаете, почему я был так рад взять у Джима это интервью, ведь это уникальная возможность узнать о нем чуточку больше и чему-то научиться. Нам также удалось побеседовать о начале его пути в мире разработке, о его первых шагах в Руби, о функциональном программировании, модели потоков в Руби и даже о его фреймворке для тестов: RSpec-Given). Так что открывайте это интервью, не поленитесь узнать об одном из самых передовых и харизматичных разработчиков!


Читать дальше →
Total votes 60: ↑59 and ↓1 +58
Views 13K
Comments 6

Процессы в разработке платежной системы

Payler corporate blog
image

Дорогие друзья!

Мы давно хотели рассказать о разработке нашей платежной системы, чтобы поделиться своим опытом. Наконец-то время беспрерывного кодинга прошло и появилось немного времени, чтобы структурировать информацию. Итак, рассказываем, как мы делали наш продукт.

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

Преамбула: «Что такое Payler сегодня?»
● Основные компоненты продукта: антифрод, ядро шлюза, публичные и внутренние API, модули процессинга, административные интерфейсы мерчанта, мобильные клиенты, внутренние утилиты;
● Продукту несколько месяцев, получен сертификат на соответствие PCI DSS, появились первые клиенты;
● Используемые технологии: C#, Python, Ruby, MySQL, Redis, Angular.js etc.;
● Команда:
○ Backend: 3 разработчика, которые периодически переключаются между компонентами;
○ Frontend: 1 разработчик;
○ Mobile: 2 разработчика — 1 iOS, 1 Android;
○ Системный администратор.

Читать дальше →
Total votes 16: ↑8 and ↓8 0
Views 9.5K
Comments 15
1