My top 7 RSpec best practices

Posted by Dmytro Shteflyuk on under Ruby & Rails (25,542 views)

BDD kinkier than TDD

I use RSpec in all my projects. It’s really hard to overemphasize how helpful it is and how much easier becomes your life if you have good specs coverage. But its outstanding flexibility enables many ways to make your specs awful: horribly slow, over-bloated, even non-readable sometimes. I do not want to teach you BDD and RSpec here, but instead I will give you some ideas how to improve your specs quality and increase efficiency of your BDD workflow.

Read the rest of entry »

Simplifying your Ruby on Rails code: Presenter pattern, cells plugin

Posted by Dmytro Shteflyuk on under Ruby & Rails (35,166 views)

Today we will talk about code organization in Ruby on Rails projects. As everybody knows, Ruby on Rails is a conventional framework, which means you should follow framework architects’ decisions (put your controllers inside app/controllers, move all your logic into models, etc.) But there are many open questions around those conventions. In this write-up I will try to summarize my personal experience and show how I usually solve these problems.

Read the rest of entry »

Создание постоянных ссылок из строк в Ruby

Posted by Dmytro Shteflyuk on under Ruby & Rails · English (18,878 views)

Если вы разрабатываете приложение на Ruby on Rails вроде блога, возможно вам понадобится генерировать URLы используя заголовки статей. Это хорошая практика, потому что поисковики обожают ключевые слова в URLах, да и выглядят они более человеко-читабельными. Просто сравните: http://example.com/posts/10 и http://example.com/posts/generating-permalinks-from-string (угу, длинновато, но зато наглядно). А любом случае, это короткая заметка о преобразовании заголовка в постоянную ссылку.

Read the rest of entry »

Удобные хелперы для мок-объектов RSpec

Posted by Dmytro Shteflyuk on under Ruby & Rails · English (25,700 views)

В RSpec есть такая замечательная штука, как мок-объекты (mocks). В двух словах: мок-объект имитирует поведение объекта, который используется тестируемыми методами. Сразу простой пример:

1
2
3
4
5
6
7
8
9
10
describe UserHelper
  it 'should generate correct link to user profile in user_link' do
    @user = mock('User')
    @user.stub!(:id, 10)
    @user.stub!(:new_record?, false)
    @user.stub!(:preferred_name, 'Dmytro S.')
    @user.stub!(:full_name, 'Dmytro Shteflyuk')
    user_link(@user).should == link_to('Dmytro S.', user_url(:id => 10), :title => 'Dmytro Shteflyuk')
  end
end

Read the rest of entry »

Тестирование мейлеров в RSpec

Posted by Dmytro Shteflyuk on under Ruby & Rails · English (21,319 views)

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

Read the rest of entry »