Зависимость от пересмешки с rewire в экспресс-приложении, заключенном в безсерверную среду - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть экспресс-приложение, созданное с помощью 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, как в моем примере без сервера.

...