node.js的sinon替换方法



我是sinon的新手,无法实现我想要的结果。

我正在尝试存根AWS S3 APIgetObject以返回一个测试提供的对象。

我的生产代码有:

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类实例被完全存根化了,这很好,但它并没有调用我的false。

我错过了什么?

我找到了一种工作方法。

步骤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
});

最新更新