У меня есть экспресс-приложение, созданное с помощью const app = express()
и обработчик сообщений.Обработка почтового запроса включает в себя загрузку на S3, которую я хочу смоделировать при модульном тестировании.
Если я сделаю это в моем основном файле my_app.js
:
var server = app.listen(3000, function () {})
module.exports = server
Тогда я смогу смоделировать S3используя rewire в моих модульных тестах:
var app = rewire('../my_app')
describe('without serverless', () => {
beforeEach(function () {
app.__set__('s3', { upload: sinon.stub().yields(null, {}) })
})
it('this works great', (done) => {
chai.request(app)
.post('/some/path')
.send('some text')
.end((err, res) => {
expect(res).to.have.status(200)
done()
})
})
})
Но я не могу этого сделать, потому что я использую серверную среду, как это (в my_app.js
):
module.exports.handler = serverless(app)
Thisтакое тест с использованием без сервера, но без макета для S3:
'use strict'
const mochaPlugin = require('serverless-mocha-plugin')
const expect = mochaPlugin.chai.expect
let wrapped = mochaPlugin.getWrapper('app', '/my_app.js', 'handler')
describe('with serverless', () => {
before((done) => {
done()
})
it('no mock means this doesnt work', () => {
const validPost = {
path: '/some/path',
httpMethod: 'POST',
body: 'some text'
}
return wrapped.run(validPost).then((response) => {
expect(response).to.have.status(202)
})
})
})
Как я могу издеваться над S3, когда есть безсерверный упаковщик?Предпочтительно использовать rewire, как в моем примере без сервера.