node.js - node.js 模块中的 Sinon Stub 依赖类
问题描述
我有一门课如下
nx-user.js
class NXUser {
constructor() {}
view(guid, data) {
//do something
}
}
然后我有如下用户控制器模块,它具有 NxUser 类的依赖项
用户控制器.js
const userDb = new NXUser();
import NXUser from "../../../persistence/nx-user";
const allUsers = () => {
return userDb.view()
}
导出 {allUsers }
我为控制器单元测试的 NxUser 类的存根视图函数编写了以下代码。但它不起作用。它总是调用实际的一个 instated 一个存根的
userController-test.js
let userdb=NXUser();
describe("user controller", function () {
let stubValue = [{
"name": "Urvashi Parmar",
"email": "urvashi.parmar@nationalexpress.com"]}
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 中没有创建的定义。
假设:您正在尝试测试 NXUser.view。
此示例是根据您的代码创建的,并且运行良好。控制台日志“已调用”将不会被调用。
强调:
- 直接存根 NXUser 视图,而不是 userdb.create;
- 我在测试中使用 async-await。
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: 'urvashi.parmar@nationalexpress.com'
}];
// 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)
$
希望这可以帮助。
推荐阅读
- git - 如果已经强制推送,请取消 git rebase
- php - 优化 AJAX - Laravel 功能
- ios - 获取本地化的相对日期 Swift
- c# - 红绿灯计时器c#
- tomcat - 如何从letsencrypt for windows server Tomcat获取ssl证书
- c# - 如何在 C#.Net 中使用 RibbonControl?
- azure - 在 Azure Application Insights 中查看错误响应文本
- python - 识别 PyCharm 子文件夹中的类
- ios - iOS Swift WKWebKit with MBCircularProgressBarView
- java - 如何在 Keycloak 身份验证之前调用 javax.servlet.Filter