serverless/test/unit/lib/cli/handle-error.test.js

53 lines
1.8 KiB
JavaScript

'use strict';
const chai = require('chai');
const sinon = require('sinon');
const observeOutput = require('@serverless/test/observe-output');
const handleError = require('../../../../lib/cli/handle-error');
const isStandaloneExecutable = require('../../../../lib/utils/is-standalone-executable');
const ServerlessError = require('../../../../lib/serverless-error');
chai.use(require('sinon-chai'));
const expect = chai.expect;
describe('test/unit/lib/cli/handle-error.test.js', () => {
it('should output error', async () => {
const output = await observeOutput(() => handleError(new ServerlessError('Test error')));
expect(output).to.have.string('Test error');
});
if (isStandaloneExecutable) {
it('should report standalone installation', async () => {
const output = await observeOutput(() => handleError(new ServerlessError('Test error')));
expect(output).to.have.string('(standalone)');
});
}
it('should handle non-error objects', async () => {
const output = await observeOutput(() => handleError(handleError('NON-ERROR')));
expect(output).to.have.string('NON-ERROR');
});
describe('with mocked telemetry', () => {
beforeEach(() => {
sinon.resetHistory();
});
it('should add `location` to `failureReason` in telemetry if error code missing', async () => {
const {
telemetryData: { failureReason },
} = await handleError(new ServerlessError('Test error'), {});
expect(failureReason).to.have.property('location');
});
it('should add `location` to `failureReason` in telemetry for non-user errors', async () => {
const {
telemetryData: { failureReason },
} = await handleError(new Error('Test error'), {});
expect(failureReason).to.have.property('location');
});
});
});