简单的ProxyRequire无法正常工作?

时间:2018-08-02 09:55:04

标签: node.js sinon

我一直无法执行Proxy-require,以下是我的代码和测试文件。我正在尝试使用proxyRequire在代码文件内添加一个函数

   //createSignature.js
    'use strict';
    var keys = require('../../../../utils/keys');

    module.exports = function createSignature(transaction) {
      try {
        let prvkeyDecoded = keys.bs58_encode('test');
        return true
      } catch (err) {
      }
    };

这是测试文件

//createSignature_unit.js
'use strict';    
const sinonChai = require("sinon-chai");
const chai = require('chai');
chai.use(sinonChai);
const sinon = require('sinon');
const createSignature = require('./createSignature');
const proxyquire = require('proxyquire').noPreserveCache().noCallThru();

const keysMock =
  {
    bs58_encode: sinon.stub()
  };
 const test = 
   proxyquire('./createSignature', {
     '../../../../utils/keys': keysMock
  })

describe('test backend', () => {
  it("Create Signature with stubs", function() {
    test('test')
    expect(keysMock.bs58_encode).to.have.been.calledOnce;
  });
});

我的test函数没有被调用,keysMock.bs58_encode也没有被调用过。我想念什么吗?

//output window 
 1) Create Signature with stubs


  0 passing (9ms)
  1 failing

  1) test backend
       Create Signature with stubs:
     AssertionError: expected stub to have been called exactly once, but it was called 0 times
      at Context.<anonymous> (createSignature_unit.js:37:46)

如果我只是打电话

it("Create Signature with stubs", function() {
    expect(test('fg')).to.be.true
    //expect(keysMock.bs58_encode).to.have.been.calledOnce;
  });

我得到的输出为AssertionError: expected undefined to be true

1 个答案:

答案 0 :(得分:0)

您的存根错误的功能为模拟。在测试中,您对bs58_encode进行了存根处理,但在源文件中使用了bs58_decode。将其更改为bs58_decode应该可以解决。

const keysMock = {
  bs58_decode: sinon.stub() // change to decode
};
const test =
  proxyquire('./createSignature', {
    '../../../../utils/keys': keysMock
  })

describe('test backend', () => {
  it("Create Signature with stubs", function () {
    test('test')
    expect(keysMock.bs58_decode).to.have.been.calledOnce; // change to decode
  });
});