node.js - mocha/sinon stub 恢复不起作用

标签 node.js mocha.js sinon

我的第一个 Node 测试脚本。我正在使用 Mocha 和 Sinon 来测试最终发送到队列的函数。 Node v8.1.3、Mocha 5.0.2、sinon 4.4.2。

var assert = require('assert');
var sinon = require('sinon');
var uut = require('../util');
var stub;

describe('processWantedItemToQueue', function() {
    beforeEach(function() {
      stub = sinon.stub(uut, 'processWantedItemToQueue').returns(true);
    });

    afterEach(function() {
      uut.processWantedItemToQueue.restore();
    });

    it('should not push the item to the queue', function() {
      assert.equal(uut.processWantedItemToValidQueue("a", "q1"), false);
    });

    it('should push the item to the queue', function() {
      assert.equal(uut.processWantedItemToValidQueue("a", "aws"), true);
    });
});

这是我的输出:

> mocha
  processWantedItemToQueue
ignoring queue q1
    ✓ should not push the item to the queue
    1) should push the item to the queue


  1 passing (34ms)
  1 failing

  1) processWantedItemToQueue
       should push the item to the queue:
     ReferenceError: processWantedItemToQueue is not defined
      at Object.processWantedItemToValidQueue (util.js:36:20)
      at Context.<anonymous> (test/test.js:20:24)

我对 stub 有一些误解。为什么我的第二次测试没有找到 stub ?

我的 util.js 看起来像这样:

module.exports = {
  processWantedItem: function(item) {
  ...
  },
  processWantedItemToQueue: function(item, queue) {
  ...
  },
  processWantedItemToValidQueue: function(item, queue) {
  ...
  }
}

最佳答案

看来这不是您的 stub 的问题,而是您的 processWantedItemToValidQueue 的实现的问题;最有可能的是,您实际上只是在第二种情况下尝试调用 processWantedItemToQueue ,但是您定义的 processWantedItemToQueue 不会在另一个函数的范围内。不过,可以肯定的是,您必须展示 processWantedItemToValidQueue 的实现。

关于node.js - mocha/sinon stub 恢复不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49135090/

相关文章:

javascript - 诗农 stub 错误: "Attempted to wrap post which is already wrapped" even though I'm restoring

node.js - Heroku 不使用定义的 PORT 环境变量

javascript - 为什么在 Node 7.2.0 中记录被拒绝的 `Promise` 也会导致记录堆栈跟踪?

javascript - 使用 mocha 进行测试时 findOne 不是函数

angularjs - 如何配置 karma-runner(也称为 testacular)以使用closure-library

javascript - 使用 Cypress 测试重定向到新路由

node.js - NodeJS exec/spawn stdout 在 8192 个字符处切断流

javascript - 我想更新 mongodb 中包含日期时间字段的对象数组

javascript - 诗乃js AssertError : expected stub to be called once but was called 0 times

javascript - 如何使用 sinon 重新创建它?