Sinon stub - 不能解构'undefined'或'null'的属性'x'

时间:2018-03-28 18:33:05

标签: sinon destructuring

我需要stub const { clientId, dateString } = await parameterParser.prepareInputParameters(con, req); 以及Sinon

const retData = { clientId: 872, dateString: '1970-01-01', }; sandbox.stub(parameterParser, 'prepareInputParameters').withArgs(con, req).returns(retData);

我尝试过使用以下内容:

TypeError: Cannot destructure property 'clientId' of 'undefined' or 'null'.

但我收到错误: const { retData } = await sqlFileReader.read('./src/database/sql/getClientIdFromLoanId.sql', [`${req.query.loan_id}`], con, req.logger);

我在测试中已成功地将以下内容存在:

const retData = {
        rowsCount: 1,
        rows: [{ client_id: 872 }],
    };
sandbox.stub(sqlFileReader, 'read').returns({ retData });

使用:

const { clientId, dateString }

但是我无法理解如何存根Option

1 个答案:

答案 0 :(得分:0)

您需要使用resolves而不是returns来存储这些存根,因为您的awaiting返回值实际上应该Promises与{ {1}},而不是retData本身。

在sinon中,retData是异步方法的便利。以下两行是相似的:

resolves

您的第二个示例可能不会引发错误,但如果您在此行之后记录sinon.stub(foo, 'bar').returns(Promise.resolve('baz')); sinon.stub(foo, 'bar').resolves('baz'); 的值:

retData

你会发现它是const { retData } = await sqlFileReader.read('./src/database/sql/getClientIdFromLoanId.sql', [`${req.query.loan_id}`], con, req.logger); 。这是因为undefined导致方法调用的结果是Promise,它没有名为await的属性。

至于为什么你的第一个样本表现不同,我不确定。我怀疑你的样品中还有其他一些不明显的东西。你介意分享更多代码吗?