diff --git a/spec/parser/javascript_spec.js b/spec/parser/javascript_spec.js index 6b59909..df573c0 100644 --- a/spec/parser/javascript_spec.js +++ b/spec/parser/javascript_spec.js @@ -9,7 +9,7 @@ describe('parser/javascript.js', function() { this.parser = new Parser(); }); - describe('#parser', function() { + describe('#parse', function() { beforeEach(function() { spyOn(regexpParser, 'parse'); @@ -42,6 +42,15 @@ describe('parser/javascript.js', function() { .done(); }); + it('rejects the returned promise with the exception thrown', function(done) { + this.parser.parse('/example') + .then(null, result => { + expect(result).toBeDefined(); + }) + .finally(done) + .done(); + }); + }); describe('#render', function() { diff --git a/src/js/parser/javascript.js b/src/js/parser/javascript.js index cd7c3e5..bdcd0b5 100644 --- a/src/js/parser/javascript.js +++ b/src/js/parser/javascript.js @@ -16,10 +16,15 @@ export default class Parser { var deferred = Q.defer(); setTimeout(() => { - javascript.Parser.SyntaxNode.state = this.state; + try { + javascript.Parser.SyntaxNode.state = this.state; - this.parsed = javascript.parse(expression.replace(/\n/g, '\\n')); - deferred.resolve(this); + this.parsed = javascript.parse(expression.replace(/\n/g, '\\n')); + deferred.resolve(this); + } + catch(e) { + deferred.reject(e); + } }); return deferred.promise;