簡體   English   中英

如何使用jasmine框架在沒有ajax的情況下模擬onload函數

[英]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個正反應測試

你可以這樣做:

  • 將JS導出為模塊
  • 在測試中導入它
  • 偽造函數然后處理預期的承諾結果

一個簡短的例子應該是這樣的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM