Skip to content

Commit e9f0611

Browse files
committed
better error messages
1 parent 8fca7b6 commit e9f0611

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

assets/reporters.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ Zone.Reporters.longStackTrace = function (zone) {
3535
var prevZone;
3636
var totalAsyncTime = 0;
3737

38-
trace.push("Error: " + zone.erroredStack._e.message);
38+
var errorMessage = Zone.Reporters.getErrorMessage(zone.erroredStack._e);
39+
trace.push("Error: " + errorMessage);
3940
trace.push(zone.erroredStack.get());
4041

4142
processZone();
@@ -68,4 +69,20 @@ Zone.Reporters.longStackTrace = function (zone) {
6869
}
6970
}
7071

72+
// why?
73+
// in JavaScript, you can throw anything, not just errors
74+
// developers abuse this. even popular HighCharts does that
75+
// That's why we need ugly solutions like this
76+
Zone.Reporters.getErrorMessage = function(error) {
77+
if(!error) {
78+
return "Oops. sometimes went wrong with zones. There is no error."
79+
} else if(typeof error == 'string') {
80+
return error;
81+
} else if(error.message) {
82+
return error.message;
83+
} else {
84+
return error.toString();
85+
}
86+
};
87+
7188
Zone.Reporters.add('longStackTrace', Zone.Reporters.longStackTrace);

tests/reporters.js

+41
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,44 @@ Tinytest.add(
6363
}
6464
}
6565
);
66+
67+
Tinytest.add(
68+
'Reporters - getErrorMessage - an error object',
69+
function (test) {
70+
var message = "hello";
71+
var err = new Error(message);
72+
test.equal(Zone.Reporters.getErrorMessage(err), message);
73+
}
74+
);
75+
76+
Tinytest.add(
77+
'Reporters - getErrorMessage - string',
78+
function (test) {
79+
var message = "hello";
80+
test.equal(Zone.Reporters.getErrorMessage(message), message);
81+
}
82+
);
83+
84+
Tinytest.add(
85+
'Reporters - getErrorMessage - object',
86+
function (test) {
87+
var message = "hello";
88+
var err = {message: message};
89+
test.equal(Zone.Reporters.getErrorMessage(err), message);
90+
}
91+
);
92+
93+
Tinytest.add(
94+
'Reporters - getErrorMessage - number',
95+
function (test) {
96+
var number = 2;
97+
test.equal(Zone.Reporters.getErrorMessage(number), number.toString());
98+
}
99+
);
100+
101+
Tinytest.add(
102+
'Reporters - getErrorMessage - nothing',
103+
function (test) {
104+
test.equal(/Oops/.test(Zone.Reporters.getErrorMessage()), true);
105+
}
106+
);

0 commit comments

Comments
 (0)