diff --git a/src/auto/injector.js b/src/auto/injector.js index 57b311f66c7e..e30a2fe89427 100644 --- a/src/auto/injector.js +++ b/src/auto/injector.js @@ -70,7 +70,7 @@ var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; var $injectorMinErr = minErr('$injector'); function extractArgs(fn) { - var fnText = fn.toString().replace(STRIP_COMMENTS, ''), + var fnText = Function.prototype.toString.call(fn).replace(STRIP_COMMENTS, ''), args = fnText.match(ARROW_ARG) || fnText.match(FN_ARGS); return args; } diff --git a/test/auto/injectorSpec.js b/test/auto/injectorSpec.js index fdd455a35247..f70695012903 100644 --- a/test/auto/injectorSpec.js +++ b/test/auto/injectorSpec.js @@ -241,6 +241,12 @@ describe('injector', function() { expect($f_n0.$inject).toEqual(['$a_']); }); + it('should handle functions with overridden toString', function() { + function fn(a) {} + fn.toString = function() { return 'fn'; }; + expect(annotate(fn)).toEqual(['a']); + expect(fn.$inject).toEqual(['a']); + }); it('should throw on non function arg', function() { expect(function() {