From 198c08a0427e66175b8ef25b6cf9a8552910dd8b Mon Sep 17 00:00:00 2001 From: Stanislav Lvovsky Date: Thu, 16 Jan 2020 16:50:36 +0200 Subject: [PATCH] update exception message (#110) * update exception message * add test --- frontend/jest.config.js | 2 +- frontend/src/App.vue | 23 +++++++++++++++-------- frontend/tests/App.spec.js | 26 ++++++++++++++++++++++++-- 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/frontend/jest.config.js b/frontend/jest.config.js index e23250e3..30f21213 100644 --- a/frontend/jest.config.js +++ b/frontend/jest.config.js @@ -35,7 +35,7 @@ module.exports = { ], coverageThreshold: { "global": { - "branches": 85, + "branches": 86, "functions": 98, "lines": 95, "statements": 95 diff --git a/frontend/src/App.vue b/frontend/src/App.vue index f5b05958..5c727032 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -242,18 +242,25 @@ export default { } } } catch (error) { - let errorInfo = "No failure info"; - if (_.isString(error)) { - errorInfo = error; - } else { - errorInfo = _.get(error, "message", _.get(error, "stack", errorInfo)); - } - - const errorMessage = `Failed to update '${question.name}' question in generator '${this.generatorName}'. Reason: ${errorInfo}`; + const errorMessage = this.getErrorMessageOnException(question, error); await this.rpc.invoke("logMessage", [errorMessage]); this.rpc.invoke("toggleLog", [{}]); } }, + getErrorMessageOnException(question, error) { + let errorInfo; + if (_.isString(error)) { + errorInfo = error; + } else { + errorInfo = _.get(error, "message", _.get(error, "stack", "")); + } + + if (!_.isEmpty(errorInfo)) { + errorInfo = ` Reason: ${errorInfo}`; + } + + return `Could not update the '${question.name}' question in generator '${this.generatorName}'.${errorInfo}`; + }, next() { if (this.resolve) { try { diff --git a/frontend/tests/App.spec.js b/frontend/tests/App.spec.js index 335e340e..1b5ba97e 100644 --- a/frontend/tests/App.spec.js +++ b/frontend/tests/App.spec.js @@ -163,7 +163,7 @@ describe('App.vue', () => { const invokeSpy = jest.spyOn(wrapper.vm.rpc, 'invoke') await wrapper.vm.updateQuestionsFromIndex(0) expect(invokeSpy).toHaveBeenCalledWith('evaluateMethod', [["validateAnswer", {"validateQ": "validateAnswer"}], 'validateQ', 'validate']) - expect(invokeSpy).toHaveBeenCalledWith('logMessage', [`Failed to update 'validateQ' question in generator 'testGen'. Reason: test error`]) + expect(invokeSpy).toHaveBeenCalledWith('logMessage', [`Could not update the 'validateQ' question in generator 'testGen'. Reason: test error`]) expect(invokeSpy).toHaveBeenCalledWith('toggleLog', [{}]) invokeSpy.mockRestore(); @@ -185,7 +185,29 @@ describe('App.vue', () => { const invokeSpy = jest.spyOn(wrapper.vm.rpc, 'invoke') await wrapper.vm.updateQuestionsFromIndex(0) expect(invokeSpy).toHaveBeenCalledWith('evaluateMethod', [["validateAnswer", {"validateQ": "validateAnswer"}], 'validateQ', 'validate']) - expect(invokeSpy).toHaveBeenCalledWith('logMessage', [`Failed to update 'validateQ' question in generator 'testGen'. Reason: test error`]) + expect(invokeSpy).toHaveBeenCalledWith('logMessage', [`Could not update the 'validateQ' question in generator 'testGen'. Reason: test error`]) + expect(invokeSpy).toHaveBeenCalledWith('toggleLog', [{}]) + + invokeSpy.mockRestore(); + }) + + test('invoke for question that throws error as error object without message', async () => { + wrapper.vm.rpc = { + invoke: jest.fn().mockRejectedValueOnce(new Error()).mockResolvedValue() + } + wrapper.vm.prompts = [{ + questions: [{ + name: 'validateQ', validate: '__Function', answer: 'validateAnswer', isWhen: true, doNotShow: false + }], + answers: {} + }] + wrapper.vm.generatorName = "testGen"; + wrapper.vm.promptIndex = 0 + + const invokeSpy = jest.spyOn(wrapper.vm.rpc, 'invoke') + await wrapper.vm.updateQuestionsFromIndex(0) + expect(invokeSpy).toHaveBeenCalledWith('evaluateMethod', [["validateAnswer", {"validateQ": "validateAnswer"}], 'validateQ', 'validate']) + expect(invokeSpy).toHaveBeenCalledWith('logMessage', [`Could not update the 'validateQ' question in generator 'testGen'.`]) expect(invokeSpy).toHaveBeenCalledWith('toggleLog', [{}]) invokeSpy.mockRestore();