#node.js #unit-testing #mocha.js #sinon
#node.js #модульное тестирование #mocha.js #sinon
Вопрос:
У меня есть эта функция writeToFile, которая либо добавляет, либо записывает в зависимости от аргумента добавления. appendFile
И writeFile
взяты из модулей fs, которые я пытаюсь добавить в свои модульные тесты. Проблема в приведенном ниже коде заключается в том , что во время тестирования, когда я создаю заглушки для fs.appendFile
и fs.writeFile
, количество вызовов не увеличивается, если я назначаю функции добавления и записи локальной переменной func
. Если я просто вызову эти функции напрямую, добавив условное условие, тесты будут работать нормально, но будут лишними строками кода и уродливыми(по мнению некоторых людей).
Было бы неплохо, если бы кто-нибудь мог объяснить это sinon
поведение с помощью функции, назначенной локальной переменной, и есть ли решение без изменения функции в utils.js
фрагмент кода из utils.js:
export async function writeToFile(path, data, append) { const func = append ? fs.appendFile : fs.writeFile; return func(path, data, (err) =gt; { if (err) { logger.error(err); } }); }
фрагмент кода из test.js:
it('Write to file', async () =gt; { const append = sinon.stub(fs, 'appendFile'); const write = sinon.stub(fs, 'writeFile'); await writeToFile('path', 'buffer', false); expect(append.callCount).to.equal(0); expect(write.callCount).to.equal(1); await writeToFile('path', 'buffer', true); expect(append.callCount).to.equal(1); expect(write.callCount).to.equal(1); });
Комментарии:
1. Когда вы вызовете
writeToFile('path', 'buffer', false);
fs.writeFile
метод , он будет вызван, такappend.callCount
должно быть0
иwrite.callCount
должно быть1
. Когда вы вызываетеwriteToFile('path', 'buffer', true)
,fs.appendFile
метод будет вызван, поэтомуappend.callCount
становится1
иwrite.callCount
остается неподвижным1
. Проходит ли этот тестовый случай?2. нет, тестовый случай не проходит. количество вызовов всегда равно нулю для обоих
3. Не могу его воспроизвести. Работает на меня.
"sinon": "^8.1.1"
Результат теста:70283615 [Function: writeFile] [Function: appendFile] ✓ Write to file 1 passing (7ms)
4. Я включен
"sinon": "^9.1.0"
, и я получаю следующую ошибку. Я отредактировал свой ответ, чтобы добавить скриншот ошибки