javascript - 在解决 sinon 时获得重复迭代,无法在 nodejs 中进行单元测试
问题描述
我正在尝试使用 sinon 在 Nodejs 中进行单元测试。
我已经安装了以下库 -
1 npm 我摩卡
[2] npm i chai
[3] npm i sinon
这是我的代码 -
unitTest-app.js
var sinon = require('sinon');
it('calls the original function', function(){
var callback = sinon.fake();
var proxy = once(callback);
proxy();
assert(callback.called);
});
it('calls the original function only once', function () {
var callback = sinon.fake();
var proxy = once(callback);
proxy();
proxy();
assert(callback.calledOnce);
// ...or:
// assert.equals(callback.callCount, 1);
});
unitTest.js
function once(fn) {
var returnValue,
called = false;
return function() {
if (!called) {
called = true;
returnValue = fn.apply(this, arguments);
}
return returnValue;
};
}
无法运行单元测试。
运行命令时 -
npm run test
出现错误 -
解决方案
以下是 npm 脚本:
"scripts": {
"test": "mocha",
"test:coverage": "nyc npm t"
},
然后,您可以使用该npm test
命令运行您的测试。此外,您应该将测试文件放入正确的目录中。见https://mochajs.org/#the-test-directory
once.js
:
function once(fn) {
var returnValue,
called = false;
return function() {
if (!called) {
called = true;
returnValue = fn.apply(this, arguments);
}
return returnValue;
};
}
module.exports = { once };
once.test.js
:
var sinon = require('sinon');
var assert = require('assert');
var { once } = require('./once');
it('calls the original function', function() {
var callback = sinon.fake();
var proxy = once(callback);
proxy();
assert(callback.called);
});
it('calls the original function only once', function() {
var callback = sinon.fake();
var proxy = once(callback);
proxy();
proxy();
assert(callback.calledOnce);
});
单元测试结果:
✓ calls the original function
✓ calls the original function only once
2 passing (6ms)
推荐阅读
- java - 如何解决编译器警告
- javascript - copy text to clipboard by click on parent element
- nginx - Nginx map 指令只使用一个条件
- php - Laravel 7.5.2 $errors 未显示在刀片上
- django - 如何通过 DRF 中的 GET 请求获取包括关系表条目在内的数据
- javascript - JavaScript - 1. .splice() 行为怪异 2. .classList.add 行为怪异
- r - Shinydashboard:创建复选框的动态框,过滤所有输入
- mysql - sql 从 2 表中选择和计数
- php - 使用 $wpdb 从 WordPress 中的数据库获取行会导致严重错误
- cypress - 将 2 个 cypress 脚本合并到 1 个