Я случайно наткнулся на старую статью Люка Редпата, в которой представлен очень простой пример BDD (очень короткий и простой для понимания даже для программистов, не являющихся Ruby, как я). Я нашел конечный результат очень неполным, что сделало пример довольно бесполезным.
Конечным результатом является один тест, который проверяет, что пользователь с заданными атрибутами действителен. На мой взгляд, этого просто недостаточно для правильной проверки правил валидации. Например, если вы измените
validates_length_of :password, :in => 6..12, :allow_nil => :true
до
validates_length_of :password, :in => 7..8, :allow_nil => :true
(или даже полностью удалить проверку длины пароля) тест все равно будет пройден, но вы, очевидно, видите, что код теперь нарушает первоначальные требования.
Я просто думаю, что последнего рефакторинга, состоящего из помещения всех отдельных тестов в один, просто недостаточно. Он проверяет только «счастливый путь», который не гарантирует многого. У меня были бы абсолютно все тесты, которые подтверждают, что корректная ошибка вызвана определенными значениями. В случае с паролем я бы проверил, что пароль длиной менее 6 и больше 12 является недействительным и вызывает соответствующую ошибку. Тест «счастливого пути» тоже будет там, но не один, как в статье.
Каково ваше мнение? Я просто пытаюсь выяснить, почему парень сделал это так, как он это сделал, и просто упустил из виду проблему или это было его намерение. Я могу что-то упустить.