首页 > 解决方案 > 在解决 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

出现错误 -

在此处输入图像描述

标签: javascriptangularunit-testingmocha.jssinon

解决方案


以下是 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)

推荐阅读