Ломая ваши тесты RSpec - PullRequest
       7

Ломая ваши тесты RSpec

5 голосов
/ 17 декабря 2011

Некоторые из моих тестов Rspec стали действительно очень большими (2000-5000 строк). Мне просто интересно, пытался ли кто-нибудь когда-нибудь разбить эти тесты на несколько файлов, которые удовлетворяют следующим условиям:

  • Существует систематический способ присвоения названия и размещения вашего теста (например, методы A-L gos to user_spec1.rb).
  • Вы можете запустить один файл, который фактически запустит другие тесты внутри других файлов.
  • Вы все еще можете запустить определенный контекст в файле
  • и, что приятно, RubyMine может нормально выполнять определенный тест (и все тесты).

На данный момент я преуспел в выполнении

#user_spec.rb
require 'spec_helper'
require File.expand_path("../user_spec1.rb", __FILE__)
include UserSpec

#user_spec1.rb
module UserSpec do
  describe User do
    ..
  end
end

1 Ответ

6 голосов
/ 17 декабря 2011

Если ваши спецификации становятся слишком большими, вероятно, ваша модель также слишком велика - поскольку вы использовали здесь «UserSpec», вы можете сказать, что ваш класс пользователя - « God class ».То есть, это слишком много.

Итак, я бы разбил это на гораздо меньшие классы, каждый из которых несет одну ответственность.Затем протестируйте эти классы изолированно.

Что вы можете обнаружить, так это то, что ваш класс User знает, как выполнять большую часть логики в вашей системе - это простая ловушка, в которую можно попасть, но ее можно избежать, если вы поставитеваша логика в классе, который принимает пользователя в качестве аргумента ... Также, если вы неукоснительно соблюдаете закон деметры (когда ваш пользовательский класс может касаться только одного уровня ниже, но не двух).

Дальнейшее чтение: http://blog.rubybestpractices.com/posts/gregory/055-issue-23-solid-design.html

...