Вопрос №53634 от пользователя Павел Хлесткин в уроке «Покрытие кода тестами (Code Coverage)», курс «JS: Автоматическое тестирование»

Павел Хлесткин

Как можно определить какой из тестов с каким результатом закончился? В output видна только общая статистика, например - успешные завершились, три из трех, ошибочные не прошли - два из трех дали ошибку...А какой конкретно вместо фейла прошел - вообще неясно...

9 1

Максим Литвинов

Скиньте, пожалуйста, ссылку на ваше ревью. Подробнее о ревью: https://help.hexlet.io/article/40-code-review

0
0

Павел Хлесткин

Закомментил те строки, которые вместо ошибки давали безошибочное прохождение теста. По моему представлению "вместо ошибки". Похоже что представление о логике работы тестов у меня неверное, но в чем ошибаюсь - непонятно.

0

Максим Литвинов

Скопируйте ваше решение и выполните сброс, чтобы получить новую версию упражнения. Затем вставьте ваше решение и запустите проверку еще раз. Если раскоментировать все строки решения, правильная реализация функции не проходит тесты. Теперь вы сможете увидеть вывод тестов и понять, какая именно правильная функция не прошла и почему. Исправьте ошибку и правильные функции начнут проходить тест.

А чтобы понять, какая именно из неправильных функций проскочила, вместо того, чтобы завалить тесты, нужно получить отчет по покрытию тестами. В нем будет указано, какие строки и в какой функции не достаточно покрываются тестами. Затем нужно изучить эту функцию и дописать к ней тесты на те случаи, которые реализуются в непокрытых строках. Здесь все, как в реальной жизни

0

Павел Хлесткин

Вывод тестов не увидел, все так же выдается общий результат с подсчетом правильных/неправильных проходов: ● check correct implementation

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  26 | test('check correct implementation', async () => {
  27 |   const testsResult = await runTests({ showOutput: true });
> 28 |   expect(getNumFailedTests(testsResult)).toBe(0);
     |                                          ^
  29 | });
  30 |
  31 | test('check wrong1', async () => {

  at Object.<anonymous> (__tests__/tests.test.js:28:42)

Может я вообще не туда смотрю? Или не так смотрю? В Output же?

0

Павел Хлесткин

Да и в целом оказалось что принцип выполнения тестов не понимаю. Тест на тесты ждет выполнения сначала по одной проверке на каждую функцию с положительным результатом. Они проходят. Далее я добавляю expect, в котором вызывается функция с неверным результатом. И тут получаю вышеприведенный результат. Хотя все матчеры с положительным результатом никуда не делись, добавился только expect на fail, но перехода к следующей группе тестов не происходит.

0

Максим Литвинов

Вы выполнили сброс упражнения? Если раскоментировать все строки и запустить проверку, вывод тестов будет таким:

FAIL  __tests__/functions.test.js
  ✓ testing function get() (36 ms)
  ✕ testing function slice() (20 ms)
  ✓ testing function indexOf() (1 ms)

  ● testing function slice()

    expect(received).toEqual(expected) // deep equality

    - Expected  - 1
    + Received  + 1

      Array [
    -   2,
        3,
    +   4,
      ]

      26 |   const actual2 = slice([1, 2, 3, 4, 5, 6], -4, -2);
      27 |   console.log(actual2);
    > 28 |   expect(actual2).toEqual([2, 3]);
         |                   ^
...
FAIL  __tests__/tests.test.js
  ✕ check correct implementation (1619 ms)

Получается, что правильный вариант функции slice() не прошел тесты. Далее приводится вывод ожидаемых и фактически полученных значений.

Принцип тестирования тестов такой: все правильные варианты функций должны пройти тестирование и все неправильные варианты должны завалиться. Тогда считается, что тесты написаны хорошо. Добиться этого можно написав тесты на все возможные варианты поведения правильных функций. Если какой-то из неправильных тестов проходит, сгенерируте отчет по покрытию тестов и посмотрите, какая функция и какие строки не прокрыты тестами.

0

Павел Хлесткин

Сброс выполнил, но ничего не изменилось. Попробую сейчас еще раз, в том виде, в котором вы приводите в комментарии, конечно намного нагляднее результат. Общий принцип понятен сразу был, непонятно как среда сопоставляет мои матчеры с теми тестовыми вариантами функций, которые прописаны автором задания. Линейный принцип - по мере упоминания в тексте программы? Или как-то еще?

0

Максим Литвинов

const { get, slice, indexOf } = getImpelementation()

В файл с написанными вами тестами по очереди импортируются сначала один комплект правильных функций get, slice, indexOf, затем три комплекта не правильных. Для каждого комплекта запускаются тесты. Для первого, правильного комплекта, все тесты должны пройти. Для каждого из трех не правильных все тесты должны упасть.

0

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия

Фронтенд-разработчик

Разработка фронтенд-компонентов веб-приложений
23 июня 8 месяцев
Иконка программы Python-разработчик
Профессия

Python-разработчик

Разработка веб-приложений на Django
23 июня 8 месяцев
Иконка программы PHP-разработчик
Профессия

PHP-разработчик

Разработка веб-приложений на Laravel
23 июня 8 месяцев
Иконка программы Node.js-разработчик
Профессия

Node.js-разработчик

Разработка бэкенд-компонентов веб-приложений
в любое время 8 месяцев
Иконка программы Верстальщик
Профессия

Верстальщик

Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия

Java-разработчик

Разработка приложений на языке Java
23 июня 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
NEW

Разработчик на Ruby on Rails

Создает веб-приложения со скоростью света
22 июня 5 месяцев

Похожие вопросы

Вадим Зотов 07 июня 2021 →

Поймал себя на мысли, что весь курс просто смотрю решение учителя, ибо вообще не интересная тема. Но в этот...

Иван Федоров 30 мая 2021 →

Добрый день. Сделал отчет по покрытию тестами, написал тесты на пропущенные условия. Запустил новый тест на...

Kostya Pershin 19 мая 2021 →

Добрый день, не могу понять, почему не пропускает второй тест. https://ru.hexlet.io/code_reviews/407876 Как...

Илья Алиев 04 мая 2021 →

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

Sergey Kirillov 25 апреля 2021 →

Почему не проходят тесты. Покрытие сделал 100%. enter link description here (https://ru.hexlet.io/code_...