javascript - Sinon 在 stubbing 之后调用原始方法
问题描述
试图存根 ES6 导入方法。但是 sinon 调用了原来的方法。
//utils.js
export function getUser(name) {
return name + " has been fetched";
}
//user.js
import { getUser } from './utils.js';
export default function printName() {
return getUser("user");
}
//user.test.js
import sinon from 'sinon';
import * as utils from '../src/utils.js';
import printName from '../src/user.js';
const assert = require('assert');
describe('print name', () => {
it('should fetch and print the user name', async () => {
let utilsStub = sinon.stub(utils, 'getUser');
utilsStub.withArgs("user").returns("test");
assert.equal("test", printName());
});
});
在同一个模块中调用方法时,它会正确存根,不确定是否有任何问题。帮助将不胜感激。
解决方案
您的代码对我来说很好:
utils.ts
:
export function getUser(name) {
return name + " has been fetched";
}
user.ts
:
import { getUser } from "./utils";
export default function printName() {
return getUser("user");
}
user.test.ts
:
import sinon from "sinon";
import * as utils from "./utils";
import printName from "./user";
const assert = require("assert");
describe("print name", () => {
it("should fetch and print the user name", async () => {
let utilsStub = sinon.stub(utils, "getUser");
utilsStub.withArgs("user").returns("test");
assert.equal("test", printName());
});
});
带有覆盖率报告的单元测试结果:
print name
✓ should fetch and print the user name
1 passing (10ms)
--------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
--------------|----------|----------|----------|----------|-------------------|
All files | 93.33 | 100 | 75 | 92.86 | |
user.test.ts | 100 | 100 | 100 | 100 | |
user.ts | 100 | 100 | 100 | 100 | |
utils.ts | 50 | 100 | 0 | 50 | 2 |
--------------|----------|----------|----------|----------|-------------------|
源代码:https ://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/56482038
推荐阅读
- javascript - discord bot js,不工作“rep”,发送随机gif
- ruby - 如何基于 Vagrant 提供者运行 ansible 任务
- vba - Access Vba 在 Insert Into 中找不到语法错误
- c# - Task.Run 有时会返回两次
- git - 子模块:权限被拒绝(公钥)
- html - 通过单选按钮显示配置的 Wordpress 图标不起作用
- angular - forkJoin 不等待多个 Http 请求完成
- java - 在 Playframework 中关闭 WSClient 的问题
- javascript - 在值之间混合颜色
- database - postgresql 将表中特定列内容的编码更改为十六进制