5 вещей, за которые я люблю RSpec

Mar 19
2007 09:31 (Программирование, RSpec, Ruby on Rails) · English (9,358 views)

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

  1. Я больше не путаю, в каком порядке стоит передавать ожидаемое и реальное значения. Сравните:

    assert_equal('login', @user.login)

    и

    @user.login.should == 'login'

    Кстати, я перепутал параметры assert_equal и когда писал эту заметку.

  2. Одного взгляда на тест хватает, чтобы понять, как должны вести себя объекты:

    context 'The User model with fixtures loaded' do
      specify 'should be friended by the user if this user added him to friends' do
        users(:bob).friends << users(:chris)
        users(:chris).should have(1).friended
        users(:chris).friended.first.should == users(:bob)
      end
    end
  3. Результаты тестов представлены в простой и понятной форме, простыми предложениями, в которых делаются утверждения относительного тех или иных сущностей системы. В большинстве случаев даже нет необходимости даже смотреть в тесты, чтобы оценить функциональность!

    The newly created User - should be valid with all neccessary attributes specified - should be invalid without login - should be invalid when login length is less than 2 - should be invalid without email - should be invalid with wrong email - should be invalid with someone else's login - should be invalid with someone else's email - should not require password and password_confirmation
  4. Я наконец-то начал писать тесты до того, как приступить к реализации функциональности в коде. По сути, любой программист мысленно продумывает, как должен вести себя тот или иной метод в виде “получив строку ’somestring’ метод должен вернуть ‘anotherstring’”. Нет ничего проще, чем описать такие размышления BDD-тестами.
  5. Встроенная и гибкая система mock-объектов позволяет тестировать функциональность ровно один раз. Например, тестируя контроллеры, нет необходимости использовать базу данных и модели,- достаточно проверить, что вызываются нужные методы моделей.

    context 'Given an signup action of UserController' do
      controller_name 'user'
     
      setup do
        @user = mock('user')
        add_stubs(@user, :password= => nil, :password_confirmation= => nil, :new_password= => nil)
      end
     
      specify 'should render edit template with empty User object' do
        User.should_receive(:new).with(:no_args).and_return(@user)
        get :signup
        response.should render_template(:edit)
        assigns[:user].should be(@user)
      end
    end

3 отзывов на '5 вещей, за которые я люблю RSpec'

Подписаться на комментарии по RSS или TrackBack на '5 вещей, за которые я люблю RSpec'.

1
сказал 21.03.2007 в 12.00

This plugin shine a light over hours of frustrating test sessions :) Thank you !

2
Alex
сказал 22.03.2007 в 11.15

Yeah, rspec is a great tool!

3
сказал 06.04.2007 в 16.35

[...] Advantages of rspec [...]

Оставить отзыв

Вы можете использовать простые теги форматирования HTML (вроде <a>, <ul> and others). Чтобы вставить пример код, используйте <code lang="php">$a = "hello";</code> (поддерживаемые языки: ruby, php, yaml, html, csharp, javascript). Также Вы можете использовать <code>$a = "hello";</code>, синтаксис не будет подсвечен. Если вы не хотите использовать тег <code>, замените символ < на &lt;.

Отправить

 
Copyright © 2005 - 2008, Dmytro Shteflyuk