无法使用 proxyquire 正确存根

问题描述

我无法理解 proxyquire。我有这个 auditEvent 方法,它是 auditEvent.js 的一部分:

const {verify} = require('@mycompany/verifylib');

const auditEvent = () => {
    blabla();
    verify();  // I want to make this call do nothing
    blablabla();
};

module.exports = { auditEvent };

test.js:

const sinon = require('sinon');
const proxyquire = require('proxyquire');

let verifyStub = sinon.stub();

let auditEvent = proxyquire('./auditEvent',{
  '@mycompany/verifylib': {
    verify: verifyStub,'@noCallThru': true,},});

auditEvent();   // fails - not a valid function - what am I doing wrong?

解决方法

您应该从 auditEvent 模块中解构 ./auditEvent 函数。

例如

auditEvent.js

const { verify } = require('@mycompany/verifylib');

const auditEvent = () => {
  verify();
};

module.exports = { auditEvent };

auditEvent.test.js

const sinon = require('sinon');
const proxyquire = require('proxyquire');

describe('68370747',() => {
  it('should pass',() => {
    let verifyStub = sinon.stub();

    let { auditEvent } = proxyquire('./auditEvent',{
      '@mycompany/verifylib': {
        verify: verifyStub,'@noCallThru': true,},});

    auditEvent();
    sinon.assert.calledOnce(verifyStub);
  });
});

测试结果:

  68370747
    ✓ should pass (1301ms)


  1 passing (1s)

---------------|---------|----------|---------|---------|-------------------
File           | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
---------------|---------|----------|---------|---------|-------------------
All files      |     100 |      100 |     100 |     100 |                   
 auditEvent.js |     100 |      100 |     100 |     100 |                   
---------------|---------|----------|---------|---------|-------------------

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...