diff --git a/.travis.yml b/.travis.yml index a43a6d4b..c970f386 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,11 +18,11 @@ matrix: - env: JASMINE_BROWSER=phantomjs include: - env: - - JASMINE_BROWSER=firefox - - SAUCE_PLATFORM=Linux + - JASMINE_BROWSER="firefox" + - SAUCE_PLATFORM="Linux" - SAUCE_VERSION='' - env: - - JASMINE_BROWSER=safari + - JASMINE_BROWSER="safari" - SAUCE_PLATFORM="OS X 10.8" - SAUCE_VERSION='' - env: @@ -38,9 +38,9 @@ matrix: - SAUCE_PLATFORM="Windows 7" - SAUCE_VERSION=8 - env: - - JASMINE_BROWSER=chrome - - SAUCE_PLATFORM=Linux + - JASMINE_BROWSER="chrome" + - SAUCE_PLATFORM="Linux" - SAUCE_VERSION='' - env: - - JASMINE_BROWSER=phantomjs + - JASMINE_BROWSER="phantomjs" - USE_SAUCE=false diff --git a/spec/core/matchers/toThrowErrorSpec.js b/spec/core/matchers/toThrowErrorSpec.js index 3c65d8c9..ab1febb6 100644 --- a/spec/core/matchers/toThrowErrorSpec.js +++ b/spec/core/matchers/toThrowErrorSpec.js @@ -175,6 +175,7 @@ describe("toThrowError", function() { result = matcher.compare(fn, CustomError); expect(result.pass).toBe(true); + debugger expect(result.message).toEqual("Expected function not to throw CustomError."); }); diff --git a/src/core/matchers/toThrowError.js b/src/core/matchers/toThrowError.js index 6354795f..7c7a379a 100644 --- a/src/core/matchers/toThrowError.js +++ b/src/core/matchers/toThrowError.js @@ -34,28 +34,38 @@ getJasmineRequireObj().toThrowError = function(j$) { } if (errorType && message) { + var name = errorType.name || errorType.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + var constructorName = thrown.constructor.name || thrown.constructor.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + if (thrown.constructor == errorType && util.equals(thrown.message, message)) { - return pass("Expected function not to throw " + errorType.name + " with message \"" + message + "\"."); + return pass("Expected function not to throw " + name + " with message \"" + message + "\"."); } else { - return fail("Expected function to throw " + errorType.name + " with message \"" + message + - "\", but it threw " + thrown.constructor.name + " with message \"" + thrown.message + "\"."); + return fail("Expected function to throw " + name + " with message \"" + message + + "\", but it threw " + constructorName + " with message \"" + thrown.message + "\"."); } } if (errorType && regexp) { + var name = errorType.name || errorType.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + var constructorName = thrown.constructor.name || thrown.constructor.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + if (thrown.constructor == errorType && regexp.test(thrown.message)) { - return pass("Expected function not to throw " + errorType.name + " with message matching " + regexp + "."); + return pass("Expected function not to throw " + name + " with message matching " + regexp + "."); } else { - return fail("Expected function to throw " + errorType.name + " with message matching " + regexp + - ", but it threw " + thrown.constructor.name + " with message \"" + thrown.message + "\"."); + return fail("Expected function to throw " + name + " with message matching " + regexp + + ", but it threw " + constructorName + " with message \"" + thrown.message + "\"."); } } if (errorType) { + var name = errorType.name || errorType.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + var constructorName = thrown.constructor.name || thrown.constructor.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + + if (thrown.constructor == errorType) { - return pass("Expected function not to throw " + errorType.name + "."); + return pass("Expected function not to throw " + name + "."); } else { - return fail("Expected function to throw " + errorType.name + ", but it threw " + thrown.constructor.name + "."); + return fail("Expected function to throw " + name + ", but it threw " + constructorName + "."); } }