Size: a a a

Software Design/Architecture/Zen

2021 January 08

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
По мне все это не очень относится к качеству теста и уж тем более к дизайну кода. Выглядит как разрешите доебаться и дать вам очень важные советы, а кто не согласен - тот идиот и тролль, очевидно
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Igor Kot
Это не догма, это второе слово в метрике "цикломатичная сложность"
Зачем пользуетесь терминами, не зная их значения? cyclomatic complexity возникает из-за if-ов и циклов (cyclomatic). У меня же тесты линейные
источник

I

Igor Kot in Software Design/Architecture/Zen
источник

I

Igor Kot in Software Design/Architecture/Zen
Т.е. это не цикломатичная сложность?
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Так promotionTotals - это и есть тот самый "билдер", о котором вы писали - он ведь вне теста находится
источник

SP

Sergey Protko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Зачем пользуетесь терминами, не зная их значения? cyclomatic complexity возникает из-за if-ов и циклов (cyclomatic). У меня же тесты линейные
тернарный оператор это if - то есть твои тесты уже не линейные
источник

AA

Artem Aleksandrov in Software Design/Architecture/Zen
Вложенные тернарники 😱
источник

I

Igor Kot in Software Design/Architecture/Zen
Он находится в тесте и производит сложные вычисления
источник

SP

Sergey Protko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Так promotionTotals - это и есть тот самый "билдер", о котором вы писали - он ведь вне теста находится
весь код тестов (включая тот который прекондишены тебе предоставляет) должен быть максимально тупым и читаемым ибо в случае тестов это единственный способ уменьшить вероятность некорректной логики)
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Sergey Protko
тернарный оператор это if - то есть твои тесты уже не линейные
Всё, что вне it(' .... ' - это ведь не часть теста. Я выше написал - то билдер для "сценариев" (scenario)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
"билдеры" в тестах (с логикой к тому же) - это запах того что декомпозиция по пизде пошла
источник

SP

Sergey Protko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Всё, что вне it(' .... ' - это ведь не часть теста. Я выше написал - то билдер для "сценариев" (scenario)
тогда вынеси в отдельный файл и отдельный тест. Тогда никаких притензий (кроме отсутствия изоляции тест кейсов)
источник

I

Igor Kot in Software Design/Architecture/Zen
Я писал о тупом билдере для заполнения first invoice готовыми данными, а не о логике построения из калькуляций
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Sergey Protko
тогда вынеси в отдельный файл и отдельный тест. Тогда никаких притензий (кроме отсутствия изоляции тест кейсов)
не понимаю, зачем 10 строчек билдера выносить в отдельный файл, который нужен только в этом файле?
К тому же этот билдер - прямо относится к описанию: describe('2 + 1: every 3rd cheapest product discounted' и describe('Reduced to 1 euro' - всё же понятно
источник

I

Igor Kot in Software Design/Architecture/Zen
Dmitriy Tkachenko
По мне все это не очень относится к качеству теста и уж тем более к дизайну кода. Выглядит как разрешите доебаться и дать вам очень важные советы, а кто не согласен - тот идиот и тролль, очевидно
Как говорится "на воре и шапка горит". Или другими словами, каждый умеет оценить намерения другого исходя из собственных.

Рекомендую в будущем прежде чем задавать список вопросов (как делают дети), сначала высказать своё мнение, чтобы эти вопросы были обоснованы.
источник

S

Shieldy in Software Design/Architecture/Zen
Татьяна Лыткина, please, press the button below within the time amount specified, otherwise you will be kicked. Thank you! (60 sec)
Powered by Todorant
источник

DE

Dmitry Eliseev in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Ваш подход к тестам понятен.
Похоже на то, что мне уже другие писали: "больше 1 expect в одном тесте - плохой тон"
Но это догматизм.
Я просто позволю себе не следовать этим догмам
Правильно вам писали.

Отдельные тесты по сценариям:

it ('Cancel pending invoice', () => {
 action
 assert
})

it ('Do not allow to cancel paid invoice', () => {
 action
 assert
})

it ('Merge amounts for same ids', () => {
 action
 assert
})

как раз собой описывают каждый сценарий использования. Каждый тест независимым от данных и времени предыдущих тестов. Можно добавлять, менять и удалять каждый сценарий почти без троганья других. И при баге падает конкретный тест.

А по простыне:

it ('Calculations', () => {
 action
 assert
 assert
 action
 assert
 assert
 action
 assert
 action
 assert
}

вообще нигде не видно и не понятно, что, где и для чего происходит.
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Dmitry Eliseev
Правильно вам писали.

Отдельные тесты по сценариям:

it ('Cancel pending invoice', () => {
 action
 assert
})

it ('Do not allow to cancel paid invoice', () => {
 action
 assert
})

it ('Merge amounts for same ids', () => {
 action
 assert
})

как раз собой описывают каждый сценарий использования. Каждый тест независимым от данных и времени предыдущих тестов. Можно добавлять, менять и удалять каждый сценарий почти без троганья других. И при баге падает конкретный тест.

А по простыне:

it ('Calculations', () => {
 action
 assert
 assert
 action
 assert
 assert
 action
 assert
 action
 assert
}

вообще нигде не видно и не понятно, что, где и для чего происходит.
Вы забываете про подготовку данных. У меня каждый "action" подготавливает данные для дальнейших, а так как вы советуете - будет простыня подготовки данных для каждого теста, причём эта подготовка будет дубликатом "action" из предыдущих тестов - зачем мне это?
источник

DE

Dmitry Eliseev in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Вы забываете про подготовку данных. У меня каждый "action" подготавливает данные для дальнейших, а так как вы советуете - будет простыня подготовки данных для каждого теста, причём эта подготовка будет дубликатом "action" из предыдущих тестов - зачем мне это?
В этом и проблема, что у вас каждый следующий тест зависит от данных предыдущего.
источник

DE

Dmitry Eliseev in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Вы забываете про подготовку данных. У меня каждый "action" подготавливает данные для дальнейших, а так как вы советуете - будет простыня подготовки данных для каждого теста, причём эта подготовка будет дубликатом "action" из предыдущих тестов - зачем мне это?
А для избавления от дубликатов как раз вам и советуют сделать удобные билдеры и скрыть туда всю низкоуровневую подготовку. Тогда тест будет простым и самодокументированным.
источник