Wednesday, July 11, 2018

使用 localstack 來開發 aws service 的整合測試

要使用這個測試,需要先啟動 localstack 的 docker
docker run -d -p 4567-4583:4567-4583 localstack/localstack
/* eslint-env mocha */
const Service = require('../../lib/service.js');
//const expect = require('chai').expect;
const { exec } = require('child_process');
const sandbox = require('sinon').createSandbox();
const sinon = require('sinon');
const Promise = require('bluebird');
describe('service.js', function () {
this.timeout(120000);
describe('test SQS integration', () => {
const awsCli = 'aws --endpoint-url=http://localhost:4576';
const sendMsg = 'sqs send-message --queue-url http://localhost:4576/queue/test-queue --message-body';
before((done) => {
// create queue in SQS
const cmd = `${awsCli} sqs create-queue --queue-name test-queue`;
exec(cmd, (error, stdout, stderr) => {
if (error) {
console.error(`error: ${error}`);
return;
}
console.log(stdout);
console.log(stderr);
done();
});
});
beforeEach((done) => {
// insert msg in SQS
const msg = {
a: 1,
b: 2,
};
const cmd = `${awsCli} ${sendMsg} '${JSON.stringify(msg)}'`;
exec(cmd, (error, stdout, stderr) => {
if (error) {
console.error(`error: ${error}`);
return;
}
console.log(stdout);
console.log(stderr);
done();
});
});
afterEach(() => {
sandbox.restore();
});
it('get msg from SQS and show msg', (done) => {
const _handler = (msg) => {
console.log('fake handler', msg);
return Promise.resolve();
};
const callback = sandbox.spy(_handler);
const config = {
region : 'us-east-1',
queueUrl: 'http://localhost:4576/queue/test-queue',
fn : callback,
};
Service.createInstance(config);
// delay to see the output
setTimeout(() => {
console.log('show call count:', callback.callCount);
sinon.assert.calledOnce(callback);
done();
}, 5000);
});
});
});
view raw service.test.js hosted with ❤ by GitHub