簡體   English   中英

如何使 window 的引導程序 object 可用於單元測試?

[英]How to make Bootstrapper object of window be available for unit testing?

我的項目中有一個 function,它從 Z05B8C74CBD96FFBFF244C1 的引導程序 object 調用 function。 下面是 function:

export default function measurement(analObj) {
    if (window.Bootsrapper._trackAnalytics === function) {
        window.Bootstrapper._trackAnalytics(analObj);
    }
}

我寫了下面的代碼來開玩笑地對這個 function 進行單元測試:

 import measurement from "../helpers/measurement"; describe('Test measurement', () => { beforeAll(() => { const Bootstrapper = { _trackAnalytics: function(obj) { return obj; }, }; window.Bootstrapper = Bootstrapper; }) test('should send analytics object to rtrack analyitics', () => { const testObj = { pageName: "Leave Abasence" } const result = measurement(testObj); expect(testObj).toEqual(result); }) })

I get "undefined" for result variable that comes from measurement function call as I am unable to make window.measurement._trackAnalytics function available for measurement function at run time.

我想知道:

  1. 我的方法對這種情況進行單元測試是否正確? 如果是,如何在單元測試運行時使_trackAnalytics function 可用於measurement function。

  2. 如果您知道,請建議任何其他更好的方法。

當您的測試運行時, window.measurement._trackAnalytics function 確實可用於measurement function。 否則,你會因為調用不是 function 的東西而收到TypeError

問題是在measurement方法中沒有返回任何內容。 調用了_trackAnalytics方法,但不返回其結果。 這就是為什么你得到undefined result

為了檢查它是否確實被調用,我會使用一個玩笑的模擬 function 測試看起來像:

test('should send analytics object to rtrack analyitics', () => {
    const testObj = {
        pageName: 'Leave Abasence'
    };

    measurement(testObj);
    expect(window.Bootstrapper._trackAnalytics).toHaveBeenCalledTimes(1);
    expect(window.Bootstrapper._trackAnalytics).toHaveBeenCalledWith(testObj);
});


請注意,您的代碼有一些問題(我希望是拼寫錯誤)。 if條件下,您正在檢查Bootsrapper而不是Bootstrapper 您正在檢查它是否等於 function 而不是檢查typeof 我認為這條線應該看起來:

 if (typeof window.Bootstrapper._trackAnalytics === 'function') {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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