Каков аргумент против использования до, пусть и субъект в тестах RSpec?

Я только начал писать тесты RSpec, и я наткнулся на руководство по стилю mousebot, которое рекомендует против let, let!, before и subject (среди прочих).

Я также читал подобные предложения в нескольких других местах (включая старый RSpec docs предупреждение о before(:all)), но я могу Кажется, они не нашли фактического аргумента против них.

Итак, вопрос:

Почему я не должен использовать эти методы в своих тестах? Какой лучший подход?

Ответ 1

Интересный вопрос; что-то, о чем я хочу узнать больше... Так что выкопали немного, и вот что я раскрыл:

Руководство по стилю стиля битвы о let и т.д.

  • В более ранней версии руководства по стилю, еще больше:

    Избегайте его, пусть, пусть!, укажите, субъект и другие DSL. Предпочитайте ясность и последовательность.

  • ThoughtBot люди сделали сообщение на let name let not. См. Также ссылку в цепочке комментариев Github Commit Comment

  • В одном из своих недавних подкастов Джо Феррис, технический директор ThoughtBot, объясняет, почему не рекомендуется использовать let и subject. Посмотрите подкаст под названием Something Else Was Smellier с отметки 27 м 37 и далее в течение следующих 5 минут.

  • Тестирование Anti-Pattern "Mystery Guest", подробно описанное в старом блоге ThoughtBot, является основной причиной того, почему не использовать let и его кузенов.

Подводя итог моему пониманию всего вышеизложенного очень кратко:

Использование let et al. затрудняет понимание того, что происходит в тесте на быстрый взгляд, и требует, чтобы человек проводил некоторое время при создании соединений.

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

Кроме того, использование let либерально в тестах приводит к чрезмерному разделению среди тестов, а также делает неявным common fixtures - то есть имеет общее приспособление для начала для каждого написанного теста, даже если оно не применяется.

раньше (: все)

Аргумент против использования before(:all) прост. Как описано в старой документации rspec:

Предупреждение. Использование before (: all) и after (: all) обычно обескураживается, потому что оно вводит зависимости между примерами. Тем не менее, это может оказаться полезным для очень дорогих операций, если вы знаете, что делаете.

before (: all) выполняется только один раз в начале примераGroup. Таким образом, существует потенциальная возможность непреднамеренно вводить зависимости между примерами. К этому также относится утверждение мысли о тестах, которое нелегко понять.

В заключение, совет для написания лучших спецификаций выглядит следующим образом:

  • Напиши тесты таким образом, чтобы их было легко понять с помощью быстрого взгляда.
  • Знайте, что вы делаете.

Ответ 2

Избегайте его, пусть, пусть!, укажите, до и тему.

Действительно? Это вырезает ноги из-под RSpec DSL. Можете также вернуться к использованию теста/блока.

Что касается того, почему они избегают let, Thoughtbot говорит: "У нас есть сообщение в блоге, которое выходит слишком долго, что, надеюсь, объяснит". Я буду с интересом ждать этих жемчужин мудрости, но пока, возьмите руководство по стилю с солью.

ИЗМЕНИТЬ

вышеупомянутое сообщение в блоге дает интересное чтение.