无法使用 proxyquire 正确存根

Posted

技术标签:

【中文标题】无法使用 proxyquire 正确存根【英文标题】:Not able to properly stub with proxyquire 【发布时间】:2021-09-23 00:00:18 【问题描述】:

我无法理解 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?

【问题讨论】:

【参考方案1】:

您应该从./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 |                   
---------------|---------|----------|---------|---------|-------------------

【讨论】:

以上是关于无法使用 proxyquire 正确存根的主要内容,如果未能解决你的问题,请参考以下文章

使用 webpack 的 Proxyquire 无法编译

TypeError:AWS.SecretsManager 不是使用 proxyquire 进行单元测试的构造函数

无法使用 Alamofire 测试存根响应

无法使用 rspec 存根辅助方法

React Native Jest - 如何使用多个钩子测试功能组件?无法存根 AccessiblityInfo 模块

无法存根控制器组件