Я пытаюсь выполнить модульное тестирование маршрута восстановления, который возвращает объект S3 из корзины.
Мой маршрут:
module.exports = function(server) {
server.get('/configs/:version', (req, res, next) => {
const s3 = new AWS.S3();
const params = {
Bucket: 'testBucket',
Key: 'testKey'
};
function send(data, next) {
res.setHeader('Content-Type', 'text/plain');
res.setHeader('Cache-Control', 'no-cache');
res.status(200);
res.send(data.Body);
next();
}
s3.getObject(params, (err, data) => (err) ? next(err) : send(data, next));
});
};
Для моего модульного теста я пытался издеваться над конструктором S3, чтобы я мог заглушить getObject
и потерпел неудачу.
describe('#configs', () => {
let req;
let res;
let next;
let server;
let config;
let AWS;
let S3;
let route;
beforeEach(() => {
req = {
params: {
version: 'testVersion'
}
};
res = {
send: sinon.spy(),
};
next = sinon.spy();
server = {
get: sinon.stub(),
};
config = {
get: sinon.stub(),
}
AWS = () => {
return {
S3: () => {
return {
getObject: sinon.stub()
}
}
}
}
route = proxyquire(process.cwd() + '/lib/routes/configs/get', {
'configs.js': config,
'aws-sdk': AWS,
});
route(server);
});
describe('#GET', () => {
it('Should register configs get route', () => {
let s3 = sinon.createStubInstance(AWS.S3, {
getObject: sinon.stub(),
});
server.get.callArgWith(1, req, res, next);
expect(server.get).calledOnce.calledWith('/configs/:version');
expect(s3.getObject).calledOnce.calledWith({
Bucket: 'testBucket',
Key: 'testKey'
});
});
});
});
Но я получаю эту ошибку: TypeError: undefined is not a spy or a call to a spy!
в методе getObject.После прочтения документации sinon снова и снова я не могу понять, как издеваться над конструктором, как я могу заглушить метод getObject, чтобы я мог убедиться, что он вызывается правильно и что он возвращается, поэтому я знаю, что его ответы обрабатываются правильно.мне с этим?