В следующем коде у меня есть функция, которая ищет файл в файловой системе на основе предоставленной конфигурации.
const fs = require('fs');
const { promisify } = require('util');
const lstat = promisify(fs.lstat);
async function doSomething(someFilePath) {
try {
const stats = await lstat(someFilePath);
} catch (err) {
throw err;
}
// do something with the file stats
}
module.exports = doSomething;
Отсюда я пытаюсь протестировать функцию doSomething
, но это терпит неудачу, потому что пути файла, которые я предоставляю, фактически не существуют. Приведенный ниже код работал , когда я использовал lstatSync
без promisify
.
const fs = require('fs');
const sinon = require('sinon');
const doSomething = require('./doSomething');
describe('The test', function() {
let lstatStub;
beforeEach(function() {
lstatStub = sinon.stub(fs, 'lstatSync');
});
afterEach(function() { sinon.restore() });
it('should pass', async function() {
lstatStub.withArgs('image.jpg').returns({
isFile: () => true,
isDirectory: () => false,
});
assert(await doSomething('image.jpg')).ok();
});
})
. Теперь происходит сбой, поскольку Error: ENOENT: no such file or directory, lstat 'image.jpg'
. Я попытался обернуть заглушку в promisify
или экспортировать promisify
ed функции в тест в заглушку. Оба не сработали.
Как заглушить метод promisify
ed fs
?