2011-12-16 3 views
5

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

  • Существует систематический способ именования и размещения теста (например, методы A-L ГСН 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 
+0

Рассматривали ли вы маркировать их вместо этого? –

+0

Извините, но я не совсем уверен, что вы подразумеваете под тегами – denniss

+0

Вы можете пометить отдельные спецификации и запустить их вместе. –

ответ

6

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

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

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

Дополнительная литература: http://blog.rubybestpractices.com/posts/gregory/055-issue-23-solid-design.html

Смежные вопросы