Начало работы с BDD / TDD (Rails / Rspec) - PullRequest
3 голосов
/ 10 января 2012

Я только начинаю изучать практику BDD / TDD (мир рад, я знаю).Одна из вещей, с которой я сейчас борюсь, это то, какие тесты действительно стоит написать.Давайте возьмем эти тесты, которые я начал для модели под названием Sport:

Factory.define :sport do |f|
  f.name 'baseball'
end


require 'spec_helper'

describe Sport do

  before(:each) do
    @sport_unsaved = Factory.build(:sport)  # returns an unsaved object
    @sport_saved = Factory.create(:sport) # returns a saved object
  end

  # Schema testing.
  it { should have_db_column(:name).of_type(:string) }
  it { should have_db_column(:created_at).of_type(:datetime) }
  it { should have_db_column(:updated_at).of_type(:datetime) }

  # Index testing.

  # Associations testing.
  it { should have_many(:leagues) }

  # Validations testing.
  it 'should only accept unique names' do
    @sport_unsaved.should validate_uniqueness_of(:name)
  end

  it { should validate_presence_of(:name) }

  it 'should allow valid values for name' do
    Sport::NAMES.each do |v|
      should allow_value(v).for(:name)
    end
  end

  it 'should not allow invalid values for name' do
    %w(swimming Hockey).each do |v|
      should_not allow_value(v).for(:name)
    end
  end

  # Methods testing.

end

Несколько конкретных вопросов, которые у меня есть:

  1. Стоит ли тестировать, что ассоциация sport.leaguesвозвращает непустое значение?
  2. Как насчет теста, который гарантирует, что модель недействительна, если имя не указано?
  3. Как насчет теста, чтобы убедиться, что действительная запись создана и не имеет ошибок проверки?

Я мог бы продолжить.В идеале были бы жесткие и быстрые правила, которым я мог бы руководствоваться при проведении своих испытаний.Но я предполагаю, что это приходит с опытом и хорошим старым прагматизмом.Я думал о том, чтобы прочитать исходный код нескольких гемов, таких как ядро ​​rails, чтобы лучше понять, что стоит тестировать, а что нет.

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

Ответы [ 2 ]

2 голосов
/ 10 января 2012
  1. Нет, если вы только повторно тестируете поведение Rails.
  2. Да - это часть проверки модели и требования, почему бы не убедиться, что требование выполнено?
  3. Проверка ваших предположений относительно процесса сохранения является хорошей идеей, и если есть какие-либо слушатели / наблюдатели жизненного цикла, они могут не быть запущены до сохранения.какая хорошая идея для тестирования в приложении.
0 голосов
/ 11 января 2012
  • Что вы должны проверить?Все, что вы не хотели бы сломать
  • Когда прекратить писать тесты?Когда страх переходит в скукулично я бы воздержался от проверки реализации БД (какие столбцы существуют и их детали).Причина: я бы хотел изменить это с течением времени, не прерывая кучу тестов и исправляя их все.Тесты должны прерываться, только если поведение нарушено.Если способ (реализация), которым вы удовлетворяете их, изменяется, тесты не должны нарушать / нуждаться в модификациях.

    HTH

...