我有一个以下课程
nx-user.js
class NXUser {
constructor() {}
view(guid, data) {
//do something
}
}
然后,我具有下面的具有NxUser类依赖项的用户控制器模块
userController.js
const userDb = new NXUser();
import NXUser from "../../../persistence/nx-user";
const allUsers = () => {
return userDb.view()
}
导出{allUsers}
我下面编写了用于对控制器单元测试的NxUser类的视图函数进行存根的代码。但是它不起作用。它总是将实际的一个称为已存根的一个]
userController-test.js
let userdb=NXUser();
describe("user controller", function () {
let stubValue = [{
"name": "Urvashi Parmar",
"email": "[email protected]"]}
it("Should create user", () => {
sinon.stub(userdb, 'create').resolves(stubValue);
userController.allUsers ().then((body) => {
expect(body[0].name).to.equal(stubValue .name);
done();
});
})
}
因为我还不能发表评论,所以我需要给出完整的答案。
困惑:在userController-test.js上,您正在尝试测试NXUser.create,而在文件nx-user.js上没有create的定义。
假设:您正在尝试测试NXUser.view。
此示例是根据您的代码创建的,并且工作正常。控制台日志“已调用”将不会被调用。
突出显示:
const sinon = require('sinon');
const { expect } = require('chai');
class NXUser {
constructor() {}
view(guid, data) {
console.log('Called');
return new Promise((resolve) => resolve([]));
}
// Add this only for dummy.
create() {
return new Promise((resolve) => resolve([]));
}
}
const userController = {
allUsers() {
const userDb = new NXUser();
return userDb.view();
}
}
describe('user controller', function () {
// Suppose you test view user.
it('should view user', async function () {
const stubValue = [{
name: 'Urvashi Parmar',
email: '[email protected]'
}];
// Suppose you stub method view and not create.
const stubUserDBView = sinon.stub(NXUser.prototype, 'view');
stubUserDBView.resolves(stubValue);
const body = await userController.allUsers();
expect(body).to.be.an('array').that.have.lengthOf(1);
expect(body[0]).to.have.property('name', stubValue[0].name);
// Restore stub.
stubUserDBView.restore();
});
});
$ npx mocha stackoverflow.js
user controller
✓ should view user
1 passing (11ms)
$
希望这会有所帮助。