Size: a a a

Node.js — русскоговорящее сообщество

2020 December 25

UT

Unknown T. in Node.js — русскоговорящее сообщество
Добрый день. Вопрос по тестированию, если у меня есть файл с разными функциями-хелперами. Внутри этого файла функции друг друга используют. Правильно ли я понимаю, что когда мы тестируем конкретную функцию, нужно стабать остальные, которые она использует, чтобы удовлетворять концепции test one thing at a time?
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Unknown T.
Добрый день. Вопрос по тестированию, если у меня есть файл с разными функциями-хелперами. Внутри этого файла функции друг друга используют. Правильно ли я понимаю, что когда мы тестируем конкретную функцию, нужно стабать остальные, которые она использует, чтобы удовлетворять концепции test one thing at a time?
если все стабать, то как ты узнаешь, что функции нормально взаимодействуют друг с другом?
источник

UT

Unknown T. in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
если все стабать, то как ты узнаешь, что функции нормально взаимодействуют друг с другом?
Ну в тесте проверять, что функции вызываются с ожидаемыми аргументами
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Unknown T.
Ну в тесте проверять, что функции вызываются с ожидаемыми аргументами
а в чем преимущество перед вызовом настоящих функций?
источник

GS

Grigorii K. Shartsev in Node.js — русскоговорящее сообщество
Unknown T.
Добрый день. Вопрос по тестированию, если у меня есть файл с разными функциями-хелперами. Внутри этого файла функции друг друга используют. Правильно ли я понимаю, что когда мы тестируем конкретную функцию, нужно стабать остальные, которые она использует, чтобы удовлетворять концепции test one thing at a time?
Смотря что ты считаешь модулем, если говорить про модульное тестирование
источник

UT

Unknown T. in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
а в чем преимущество перед вызовом настоящих функций?
Я не эксперт, но в том, что если сломать другую настоящую функцию, то упадет тест другой функции, хотя мы не собирались её тестировать
источник

GS

Grigorii K. Shartsev in Node.js — русскоговорящее сообщество
Если это разные функции хэлперы, которые решают разные задачи, не связанные друг с другом, которые условно независимые - то да, мокаешь.

Если это функции, которые решают подзадачи одной задачи, которые декомпозируют модуль - то и тестируешь, как целое
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Unknown T.
Я не эксперт, но в том, что если сломать другую настоящую функцию, то упадет тест другой функции, хотя мы не собирались её тестировать
а если у тебя стабы, то тесты не сломаются, зато в проде будет ошибка?
источник

GS

Grigorii K. Shartsev in Node.js — русскоговорящее сообщество
В разумных пределах, конечно.
Если у тебя мок функции превращается в её реализацию в тесте - то что-от пошло не так
источник

UT

Unknown T. in Node.js — русскоговорящее сообщество
Grigorii K. Shartsev
Если это разные функции хэлперы, которые решают разные задачи, не связанные друг с другом, которые условно независимые - то да, мокаешь.

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

GS

Grigorii K. Shartsev in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
а если у тебя стабы, то тесты не сломаются, зато в проде будет ошибка?
А почему в проде будет ошибка?
Если обе функции работают, но не работает их комбинация, то делается на них просто интеграционный тест, который уже проверяет, что они работают вместе.
источник

UT

Unknown T. in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
а если у тебя стабы, то тесты не сломаются, зато в проде будет ошибка?
++
такой же вопрос, но так можно про все тесты сказать с другой стороны, любые стабы к этому могут привести
источник

GS

Grigorii K. Shartsev in Node.js — русскоговорящее сообщество
Unknown T.
То есть если есть куча функций, нужных для декомпозиции на простые элементы, но которые не экспортируются, их и тестировать не надо?
Всё, что не экспортируется, вообще не тестируется
источник

GS

Grigorii K. Shartsev in Node.js — русскоговорящее сообщество
Тестируется то, чем можно пользоваться. То, у чего есть интерфейс его использования
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Grigorii K. Shartsev
А почему в проде будет ошибка?
Если обе функции работают, но не работает их комбинация, то делается на них просто интеграционный тест, который уже проверяет, что они работают вместе.
почему бы тогда сразу не использовать настоящие модули в тестах?
источник

GS

Grigorii K. Shartsev in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
почему бы тогда сразу не использовать настоящие модули в тестах?
Я исходил из того, что эти две функции - это не связанные друг с другом функции, условно разные юниты, лежащие в одном модуле.
источник

GS

Grigorii K. Shartsev in Node.js — русскоговорящее сообщество
// helper.js
function a() { }
function b() { a() }
export function c() { a() b() }

Тут, разумеется, тестируется функция "c", без моков a и b
источник

UT

Unknown T. in Node.js — русскоговорящее сообщество
Ну а если это разные функции, и нужно их стабать. Как это сделать? Использую sinon, он может стабать только проперти объектов, просто функции не может
источник

GS

Grigorii K. Shartsev in Node.js — русскоговорящее сообщество
// helper.js
export function a() { }

function b() { }
export function c() { a() b() }

Если тут A и C лежат в одном модуле "просто так", и являются разными функциями для разных задач, тогда тестируются отдельно, и при тестировании С мокается А.

Но в этом случае возникает вопрос, какого они в одном модуле
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Grigorii K. Shartsev
// helper.js
export function a() { }

function b() { }
export function c() { a() b() }

Если тут A и C лежат в одном модуле "просто так", и являются разными функциями для разных задач, тогда тестируются отдельно, и при тестировании С мокается А.

Но в этом случае возникает вопрос, какого они в одном модуле
я могу понять моки внешнего апи или работы с бд, но зачем мокать что-то еще?
источник