[英]How can I mock onload function without ajax using jasmine framework
javascript文件:
const getDisplayNews = () => new Promise((resolve, reject) => {
const request = new XMLHttpRequest();
request.open("GET", "https://newsapi.org/v2/everything?sources=al-jazeera-english&apiKey=**********************", true);
request.onload = () => {
if (request.status >= 200 && request.status < 400) {
resolve(JSON.parse(request.response));
} else if (request.status === 404) {
reject("Error! Not Found");
}
};
request.send();
});
我需要在這里模擬onload函數。 我已經完成了開放功能。 這是代碼:
describe("javascript file", () => {
describe("The exposed displaynews function", () => {
let resolveSpy;
let rejectSpy;
beforeEach(() => {
XMLHttpRequest.prototype = jasmine.createSpyObj("XMLHttpRequestSpy", ["open"]);
});
it("returns a promise object", () => {
expect(getDisplayNews()).toEqual(jasmine.any(Promise));
});
});
it("should call proper API", () => {
getDisplayNews();
expect(XMLHttpRequest.prototype.open).toHaveBeenCalledWith(
"GET", "https://newsapi.org/v2/everything?sources=al-jazeera-english&apiKey=**************", true);
});
我如何為onload功能做到這一點。
謝謝
這實際上取決於您是單元測試還是集成測試。 對於簡單的單元測試,還應該有2個正反應測試
你可以這樣做:
一個簡短的例子應該是這樣的:
it('Should Resolve', () => {
spyOn(moduleName,'load').and.callFake(() => {
return 200;
});
expect(XMLHttpRequest.prototype.load).toBe(200);
})
it('Should NOT Resolve', () => {
spyOn(moduleName,'load').and.callFake(() => {
return 400;
});
expect(XMLHttpRequest.prototype.load).toBe(400);
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.