【问题标题】:nodejs sinonjs stub on class construcor类构造函数上的节点js sinon js存根
【发布时间】:2019-05-14 19:00:58
【问题描述】:

我正在使用 nodejs exif 库从 JPEG 文件中检索元数据。

这个库是这样使用的:

import * as exif from 'exif'

new exif.ExifImage('path_to_file.jpg', function(err, metadata){ ... })

我到处都找到了如何使用 sinon 存根类方法,非常简单。

但我不知道如何存根此类构造函数,以便 元数据(如果我想测试失败的情况,则错误)将成为我执行测试所需的存根值。

【问题讨论】:

    标签: node.js sinon stub


    【解决方案1】:

    我们仍然可以使用带有callsFake 功能的Sinon。这是一个例子:

    // src.js
    
    const exif = require("exif");
    
    function readImage() {
      // convert to promise for easier testing
      return new Promise((resolve, reject) => {
        new exif.ExifImage("path_to_file.jpg", function(err, metadata) {
          if (err) {
            reject(err);
          }
    
          resolve(metadata);
        });
      });
    }
    
    module.exports = { readImage };
    
    

    同时进行测试

    // test.js
    
    const sinon = require('sinon');
    const src = require('./src');
    const exif = require('exif');
    const expect = require('chai').expect;
    
    describe('test exifimage', () => {
      let exifStub;
    
      beforeEach(function() {
        exifStub = sinon.stub(exif, 'ExifImage')
      })
    
      afterEach(function() {
        sinon.restore();
      })
    
      it('test when success', async () => {
        const metadata = 'cinta';
    
        // mock ExifImage as similar as its function signature
        exifStub.callsFake((filename, callback) => {
          callback(null, metadata); // error is set as null then we set metadata
        });
    
        const response = await src.readImage();
    
        expect(response).to.equal(metadata);
      });
    
      it('test when error', async () => {
        const errorMessage = 'this is error';
    
        exifStub.callsFake((filename, callback) => {      
          callback(errorMessage); // specify error, error is defined as first param
        });
    
        try {
          await src.readImage();
        } catch (error) {
          expect(error).to.equal(errorMessage);
        }
      });
    });
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2016-04-07
      • 2020-08-26
      • 2015-06-04
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      相关资源
      最近更新 更多