问题描述
我在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"
}
]);
});
});