Можно ли переписать модульный тест в Javascript?
Недавно я начал модульное тестирование приложения JavaScript, над которым я работаю. Независимо от того, использую ли я Жасмин,QUnit или другое, я всегда пишу множество тестов. Теперь у меня есть исходный код с скажем:
function calc()
{
// some code
someOtherFunction();
// more code
}
У меня также есть тест (независимо от того, какие рамки, с Jasmine spies или sinon.js или что-то), который подтверждает, что someOtherFunction()
называется когда calc()
выполнен. Тест проходит. Теперь в какой-то момент я рефакторину функцию calc, чтобы someOtherFunction()
вызов не существует, например:
function calc()
{
// some code
someVariable++;
// more code
}
Предыдущий тест не пройден, если функция все еще будет функционировать как положено, просто ее код будет другим.
Теперь я не уверен, правильно ли я понимаю, как проводится тестирование. Кажется очевидным, что мне придется вернуться и переписать тест, но если это произойдет, что-то не так с моим подходом? Это плохая практика? Если да, то в какой момент я ошибся.
3 ответа
Вы написали отличный юнит-тест.
Модульные тесты должны замечать скрытые побочные эффекты при изменении реализации. И тест должен провалиться, когда ожидаемые значения не отображаются.
Итак, посмотрите на свой модульный тест, где ожидаемое значение не совпадает, и решите, в чем заключалась проблема: 1) Модульный тест протестировал то, что не должно (изменить тест) 2) Код не работает (добавьте отсутствующий побочный эффект))
Общее правило: не проверяйте детали реализации. Поэтому, учитывая, что вы решили, что удалить вызов можно, метод был деталью реализации, и поэтому вам не следовало проверять, был ли он вызван.
20/20 задним числом это великая вещь, не так ли?
В общем, я бы не стал проверять, что "публичный" метод называется "приватным". Делегирование тестирования должно быть зарезервировано для случаев, когда один класс вызывает другой.
Это нормально, чтобы переписать этот тест. Многие тесты не могут быть идеальными на первом проходе. Наиболее распространенным тестовым запахом является тесная связь с деталями реализации.
Ваш модульный тест должен проверить поведение объекта, а не то, как он достиг результата. Если вы строго делаете это в нечетном стиле, возможно, вам следует отменить измененный код и сначала провести рефакторинг теста. Но независимо от того, какую методику вы используете, можно изменить тест, если вы отделите его от деталей тестируемой системы.