如何解决使用sinon存根fs.promises.readFile
我在node.js中有这个fn,它从文件中读取json数据。
async getAllProducts() {
try {
return JSON.parse(await fs.promises.readFile("data/products.json"));
} catch (error) {
if (error.message === "Unexpected end of JSON input") {
throw new NoProductsExistError("The File is Empty");
}
throw new FileReadingError("Error Reading File");
}
}
我正在尝试对方法进行存根。到目前为止,这是我的代码。
const chai = require("chai");
const expect = chai.expect;
const sinon = require("sinon");
const dao = require("./dao");
const fs = require("fs");
describe("getAllProducts",() => {
it("should return all products",() => {
sinon
.stub(fs.promises,"readFile")
.withArgs("data/products.json")
.returns(
JSON.stringify([
{
productId: 101,productName: "Sony XB450AP Wired Headset"
},{
productId: 102,productName: "Sony XB950"
}
])
);
expect(dao.getAllProducts()).to.equal([
{
productId: 101,productName: "Sony XB450AP Wired Headset"
},{
productId: 102,productName: "Sony XB950"
}
]);
});
});
但是当我在配置了mocha的情况下运行npm test时,我得到了
1) getAllProducts
should return all products:
AssertionError: expected {} to equal [ Array(2) ]
at Context.<anonymous> (data\dao.spec.js:27:35)
at processImmediate (internal/timers.js:458:21)
不确定如何解决此问题。任何帮助都非常感激
解决方法
NM,我知道了...
正确的代码
const chai = require("chai");
const expect = chai.expect;
const sinon = require("sinon");
const dao = require("./dao");
const fs = require("fs");
describe("getAllProducts",() => {
it("should return all products",*async* () => {
sinon
.stub(fs.promises,"readFile")
.withArgs("data/products.json")
.returns(
JSON.stringify([
{
productId: 101,productName: "Sony XB450AP Wired Headset"
},{
productId: 102,productName: "Sony XB950"
}
])
);
expect(*await* dao.getAllProducts()).to.*deep*.equal([
{
productId: 101,productName: "Sony XB450AP Wired Headset"
},{
productId: 102,productName: "Sony XB950"
}
]);
});
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。