Делает ли ActiveRecord код Ruby on Rails трудным для тестирования? - PullRequest
3 голосов
/ 18 апреля 2010

Я провел большую часть своего времени на статически типизированных языках (в основном C #). У меня плохой опыт работы с шаблоном Active Record и модульным тестированием из-за статических методов и сочетания сущностей и кода доступа к данным.

Поскольку сообщество Ruby, вероятно, является наиболее тестируемым среди сообществ, и Rails ActiveRecord кажется популярным, должен быть какой-то способ объединения кода на основе TDD и ActiveRecord в Ruby on Rails.

Я бы предположил, что проблема в динамических языках, так или иначе, исчезнет, ​​но я не вижу как. Так в чем же подвох?

Ответы [ 2 ]

3 голосов
/ 18 апреля 2010

Проблема в том, что приспособления ужасны. Некоторое время назад я прочитал статью под названием The Lie , и она открыла мне глаза. Эта статья посвящена Машинисту , который я использовал и любил, но в настоящее время я предпочитаю factory_girl . Вот базовый пример из их README:

Вы определяете Фабрику с достаточным количеством значений по умолчанию для прохождения тестов:

# This will guess the User class
Factory.define :user do |u|
  u.first_name 'John'
  u.last_name  'Doe'
  u.admin false
end

И тогда в ваших тестах вы можете переопределять или добавлять значения по мере необходимости (придуманный пример RSpec)

describe User, "#is_admin?" do
  before(:each) do
    @user = Factory(:user, :admin => true, :email => 'jdoe@email.com')
  end

  it "should be true"
    @user.is_admin?.should be_true
  end
end

@user теперь является реальной, работающей, работающей моделью ActiveRecord, которая (временно) живет в тестовой базе данных. Вы также можете использовать фабрики в тестах контроллеров. Вы могли бы издеваться над ними, но в моем ограниченном опыте усилия не стоят незначительного прироста производительности. В основном я прикалываюсь, когда мне нужно проверить условие (save возвращает false, даже если запись действительна, чтобы я мог проверить условие сбоя).

После использования двух библиотек, упомянутых здесь, вы не можете заплатить мне, чтобы я снова использовал приборы.

2 голосов
/ 18 апреля 2010

Хитрость в том, что вам не нужен трюк. Вы можете создавать экземпляры ActiveRecord в тестах. Посмотрите здесь , чтобы узнать, как использовать простое тестирование в Rails.

Вы можете прочитать официальное руководство по тестированию Rails , чтобы составить представление о TDD в Rails. Также взгляните на две другие популярные платформы тестирования RSpec (мой любимый, смотреть насмешливый скринкаст ) и Следует .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...