使用包装在`promisify`中的`fs`对Node.js函数进行单元测试>

问题描述 投票:0回答:1

在下面的代码中,我有一个函数根据提供的配置在文件系统中寻找文件。

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时,以下代码was

正常工作。
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方法?

在下面的代码中,我具有一个函数,该函数根据提供的配置在文件系统中寻找文件。 const fs = require('fs'); const {promisify} = require('util'); const lstat = ...

node.js unit-testing sinon fs node-promisify
1个回答
0
投票

您可以使用Link Seamsproxyquire程序包存根promisify功能。

© www.soinside.com 2019 - 2024. All rights reserved.