'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') }) }) })