【问题标题】:node.js sinon replace methodnode.js sinon替换方法
【发布时间】:2020-11-11 05:34:19
【问题描述】:

我是sinon 的新手,无法达到我想要的结果。

我正在尝试存根 AWS S3 API getObject 以返回测试提供的对象。

我的生产代码有:

let s3 = new AWS.S3({ apiVersion: '2006-03-01' });
let params = {
  Bucket: aws_bucket,
  Key: path
};

s3.getObject(params, function(err, data) {
    ...
    });

我的测试代码有:

describe('GET /image', function() {
  beforeEach(function() {
    let stub = sinon.createStubInstance(AWS.S3);
    stub.getObject.callsFake(() => { console.log('stubbed'); });
  });

当我运行测试时,AWS S3 类实例被完全存根,这很好,但它并不是我的假。

我错过了什么?

【问题讨论】:

标签: node.js sinon


【解决方案1】:

我找到了一种可行的方法。

步骤 1 将 AWS.S3 实例包装在另一个模块中。

// s3.js

var AWS = require('aws-sdk');

var s3 = new AWS.S3({ apiVersion: '2006-03-01' });
module.exports = s3;

第 2 步更改生产代码以使用此实例,而不是自己创建。

// image.js

var s3 = require('./s3');
// ... other code ...
s3.getObject(...);

第 3 步存根需要存根的内容。

// image-test.js
var s3 = require('./s3');

var getObjectStub;

describe('GET /image', function() {
  beforeEach(function() {
    getObjectStub = sinon.stub(s3, 'getObject').callsFake(() => { console.log('stubbed'); });
  });

  afterEach(() => {
    getObjectStub.restore();
  });
  // test code continues
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-28
    • 2017-04-09
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多