如何在节点中使用 sinon 为 module.exports 和原型编写单元测试

How to write unittests for module.exports and prototype using sinon in node

我有两个文件 - cloud utils.jsprocessor.js。我在 processor.js 文件

中导入 utils.js 文件

如何在 node js 应用程序中使用 sinon 为以下代码编写单元测试用例。

utils.js

exports.create = function(applicationId, password) {
  return new sdk(applicationId, password);
}

function sdk(applicationId, password) {
  this.appId = applicationId;
  this.password = password;

  this.serverUrl = "https://cloud.com";
}

sdk.prototype.processImage = function(filePath, settings, userCallback) {
  console.log('here at processImage');
}

processor.js

import CloudUtils from '../lib/sdk';

export default class CLOUD {

  constructor() {}

  getCloudData = async(payload) => {
    var sdk = CloudUtils.create(appId, password);
    sdk.processImage(input, settings, this.uploadCompleted);

  }
}

现在,我必须为 processor.js 文件的 getCloudData() 方法和间谍 sdk.processImage() 方法编写测试用例。

我遇到了困难 运行 你的 babel 代码所以,使用了 non-ES 代码。测试是检查processImage是否至少被调用过一次,如果是,则断言返回值是否为'cloud'。

要使测试通过,只需在存根调用中传递值 'cloud'。

// a.js

var B=require('./b');
class CLOUD {
getCloudData(){
        var b = new B();
        return b.processImage();
    }    
}

module.exports = CLOUD;

// b.js

class cloudutils {
processImage(){
        return 'cloud';
    }}

module.exports = cloudutils;

// 测试文件

   var A=require('./a'),B=require('./b')
   var sinon=require('sinon');
   var assert=require('assert');
   describe("Test", () => {

    var InstanceOfB;
    var InstanceOfA;
    beforeEach(() => {
        InstanceOfB = new B();
        InstanceOfA = new A();
    });

    it('should call processImage at least once', () => {
        sinon.stub(B.prototype, 'processImage', () => 'mock');
        let res = InstanceOfA.getCloudData();

        sinon.assert.calledOnce(B.prototype.processImage);
        assert.equal(res,'cloud');
    });
});