mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 19:26:42 +08:00
Improve error message of fetch
when xhr.onerror occurs (#3003)
* Ensure fetch-tests fail (instead of timeout) on failure * Standardize failure handling in fetch-tests * Improve flawed failure condition of test_fetch_json Previously, the assertion was always true * Implement better error message for for xhr.onerror within fetch
This commit is contained in:

committed by
Vladimir Enchev

parent
329817a2ba
commit
06c04c41fb
@ -14,12 +14,7 @@ export var test_fetch = function (done: (err: Error, res?: string) => void) {
|
|||||||
TKUnit.assert(r instanceof Response, "Result from fetch() should be valid Response object! Actual result is: " + r);
|
TKUnit.assert(r instanceof Response, "Result from fetch() should be valid Response object! Actual result is: " + r);
|
||||||
done(null);
|
done(null);
|
||||||
// << (hide)
|
// << (hide)
|
||||||
}, function (e) {
|
}).catch(failOnError(done));
|
||||||
// Argument (e) is Error!
|
|
||||||
// >> (hide)
|
|
||||||
done(e);
|
|
||||||
// << (hide)
|
|
||||||
});
|
|
||||||
// << fetch-response
|
// << fetch-response
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -31,12 +26,7 @@ export var test_fetch_text = function (done: (err: Error, res?: string) => void)
|
|||||||
TKUnit.assert(types.isString(r), "Result from text() should be string! Actual result is: " + r);
|
TKUnit.assert(types.isString(r), "Result from text() should be string! Actual result is: " + r);
|
||||||
done(null);
|
done(null);
|
||||||
// << (hide)
|
// << (hide)
|
||||||
}, function (e) {
|
}).catch(failOnError(done));
|
||||||
// Argument (e) is Error!
|
|
||||||
// >> (hide)
|
|
||||||
done(e);
|
|
||||||
// << (hide)
|
|
||||||
});
|
|
||||||
// << fetch-string
|
// << fetch-string
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -45,15 +35,10 @@ export var test_fetch_json = function (done: (err: Error, res?: string) => void)
|
|||||||
fetch("https://httpbin.org/get").then(response => { return response.json(); }).then(function (r) {
|
fetch("https://httpbin.org/get").then(response => { return response.json(); }).then(function (r) {
|
||||||
// Argument (r) is JSON object!
|
// Argument (r) is JSON object!
|
||||||
// >> (hide)
|
// >> (hide)
|
||||||
TKUnit.assert(types.isString(JSON.stringify(r)), "Result from json() should be JSON object! Actual result is: " + r);
|
TKUnit.assertNotNull(r, "Result from json() should be JSON object!");
|
||||||
done(null);
|
done(null);
|
||||||
// << (hide)
|
// << (hide)
|
||||||
}, function (e) {
|
}).catch(failOnError(done));
|
||||||
// Argument (e) is Error!
|
|
||||||
// >> (hide)
|
|
||||||
done(e);
|
|
||||||
// << (hide)
|
|
||||||
});
|
|
||||||
// << fetch-json
|
// << fetch-json
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -65,12 +50,7 @@ export var test_fetch_formData = function (done: (err: Error, res?: string) => v
|
|||||||
TKUnit.assert(r instanceof FormData, "Result from formData() should be FormData object! Actual result is: " + r);
|
TKUnit.assert(r instanceof FormData, "Result from formData() should be FormData object! Actual result is: " + r);
|
||||||
done(null);
|
done(null);
|
||||||
// << (hide)
|
// << (hide)
|
||||||
}, function (e) {
|
}).catch(failOnError(done));
|
||||||
// Argument (e) is Error!
|
|
||||||
// >> (hide)
|
|
||||||
done(e);
|
|
||||||
// << (hide)
|
|
||||||
});
|
|
||||||
// << fetch-formdata
|
// << fetch-formdata
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -81,7 +61,14 @@ export var test_fetch_fail_invalid_url = function (done) {
|
|||||||
fetch("hgfttp://httpbin.org/get").catch(function (e) {
|
fetch("hgfttp://httpbin.org/get").catch(function (e) {
|
||||||
completed = true;
|
completed = true;
|
||||||
done(null)
|
done(null)
|
||||||
});
|
}).catch(failOnError(done));
|
||||||
|
};
|
||||||
|
|
||||||
|
export var test_fetch_invalid_url_fail_message = function (done) {
|
||||||
|
fetch("hgfttp://httpbin.org/get").catch(function (e: TypeError) {
|
||||||
|
TKUnit.assert(e.message.match(/Network request failed:.{2,}/), "Failure message should contain details on the failure. Actual message was: " + e.message);
|
||||||
|
done(null);
|
||||||
|
}).catch(failOnError(done));
|
||||||
};
|
};
|
||||||
|
|
||||||
export var test_fetch_response_status = function (done) {
|
export var test_fetch_response_status = function (done) {
|
||||||
@ -91,20 +78,10 @@ export var test_fetch_response_status = function (done) {
|
|||||||
// Argument (response) is Response!
|
// Argument (response) is Response!
|
||||||
var statusCode = response.status;
|
var statusCode = response.status;
|
||||||
// >> (hide)
|
// >> (hide)
|
||||||
try {
|
|
||||||
TKUnit.assert(types.isDefined(statusCode), "response.status should be defined! Actual result is: " + statusCode);
|
TKUnit.assert(types.isDefined(statusCode), "response.status should be defined! Actual result is: " + statusCode);
|
||||||
done(null);
|
done(null);
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
done(err);
|
|
||||||
}
|
|
||||||
// << (hide)
|
// << (hide)
|
||||||
}, function (e) {
|
}).catch(failOnError(done));
|
||||||
// Argument (e) is Error!
|
|
||||||
// >> (hide)
|
|
||||||
done(e);
|
|
||||||
// << (hide)
|
|
||||||
});
|
|
||||||
// << fetch-status-response
|
// << fetch-status-response
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -115,20 +92,10 @@ export var test_fetch_response_headers = function (done) {
|
|||||||
// Argument (response) is Response!
|
// Argument (response) is Response!
|
||||||
// var all = response.headers.getAll();
|
// var all = response.headers.getAll();
|
||||||
// >> (hide)
|
// >> (hide)
|
||||||
try {
|
|
||||||
TKUnit.assert(types.isDefined(response.headers), "response.headers should be defined! Actual result is: " + response.headers);
|
TKUnit.assert(types.isDefined(response.headers), "response.headers should be defined! Actual result is: " + response.headers);
|
||||||
done(null);
|
done(null);
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
done(err);
|
|
||||||
}
|
|
||||||
// << (hide)
|
// << (hide)
|
||||||
}, function (e) {
|
}).catch(failOnError(done));
|
||||||
// Argument (e) is Error!
|
|
||||||
// >> (hide)
|
|
||||||
done(e);
|
|
||||||
// << (hide)
|
|
||||||
});
|
|
||||||
// << fetch-headers-response
|
// << fetch-headers-response
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -138,16 +105,9 @@ export var test_fetch_headers_sent = function (done) {
|
|||||||
headers: { "Content-Type": "application/json" }
|
headers: { "Content-Type": "application/json" }
|
||||||
}).then(function (response) {
|
}).then(function (response) {
|
||||||
var result = response.headers;
|
var result = response.headers;
|
||||||
try {
|
|
||||||
TKUnit.assert(result.get("Content-Type") === "application/json", "Headers not sent/received properly! Actual result is: " + result);
|
TKUnit.assert(result.get("Content-Type") === "application/json", "Headers not sent/received properly! Actual result is: " + result);
|
||||||
done(null);
|
done(null);
|
||||||
}
|
}).catch(failOnError(done));
|
||||||
catch (err) {
|
|
||||||
done(err);
|
|
||||||
}
|
|
||||||
}, function (e) {
|
|
||||||
done(e);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export var test_fetch_post_form_data = function (done) {
|
export var test_fetch_post_form_data = function (done) {
|
||||||
@ -162,16 +122,9 @@ export var test_fetch_post_form_data = function (done) {
|
|||||||
}).then(r => {
|
}).then(r => {
|
||||||
return r.formData();
|
return r.formData();
|
||||||
}).then(function (r) {
|
}).then(function (r) {
|
||||||
try {
|
|
||||||
TKUnit.assert(r instanceof FormData, "Content not sent/received properly! Actual result is: " + r);
|
TKUnit.assert(r instanceof FormData, "Content not sent/received properly! Actual result is: " + r);
|
||||||
done(null);
|
done(null);
|
||||||
}
|
}).catch(failOnError(done));
|
||||||
catch (err) {
|
|
||||||
done(err);
|
|
||||||
}
|
|
||||||
}, function (e) {
|
|
||||||
done(e);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export var test_fetch_post_json = function (done) {
|
export var test_fetch_post_json = function (done) {
|
||||||
@ -182,20 +135,14 @@ export var test_fetch_post_json = function (done) {
|
|||||||
body: JSON.stringify({ MyVariableOne: "ValueOne", MyVariableTwo: "ValueTwo" })
|
body: JSON.stringify({ MyVariableOne: "ValueOne", MyVariableTwo: "ValueTwo" })
|
||||||
}).then(r => { return r.json(); }).then(function (r) {
|
}).then(r => { return r.json(); }).then(function (r) {
|
||||||
// >> (hide)
|
// >> (hide)
|
||||||
try {
|
|
||||||
TKUnit.assert(r.json["MyVariableOne"] === "ValueOne" && r.json["MyVariableTwo"] === "ValueTwo", "Content not sent/received properly! Actual result is: " + r.json);
|
TKUnit.assert(r.json["MyVariableOne"] === "ValueOne" && r.json["MyVariableTwo"] === "ValueTwo", "Content not sent/received properly! Actual result is: " + r.json);
|
||||||
done(null);
|
done(null);
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
done(err);
|
|
||||||
}
|
|
||||||
// << (hide)
|
// << (hide)
|
||||||
// console.log(result);
|
// console.log(result);
|
||||||
}, function (e) {
|
}).catch(failOnError(done));
|
||||||
// >> (hide)
|
|
||||||
done(e);
|
|
||||||
// << (hide)
|
|
||||||
// console.log("Error occurred " + e);
|
|
||||||
});
|
|
||||||
// << fetch-post-json
|
// << fetch-post-json
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const failOnError = function (done: (err: Error, res?: string) => void) {
|
||||||
|
return e => done(e);
|
||||||
|
}
|
@ -310,8 +310,8 @@
|
|||||||
resolve(new Response(xhr.responseText, options))
|
resolve(new Response(xhr.responseText, options))
|
||||||
}
|
}
|
||||||
|
|
||||||
xhr.onerror = function () {
|
xhr.onerror = function (error) {
|
||||||
reject(new TypeError('Network request failed'))
|
reject(new TypeError(['Network request failed:', error.message].join(' ')))
|
||||||
}
|
}
|
||||||
|
|
||||||
xhr.open(request.method, request.url, true)
|
xhr.open(request.method, request.url, true)
|
||||||
|
Reference in New Issue
Block a user