[英]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.
我想知道:
我的方法對這種情況進行單元測試是否正確? 如果是,如何在單元測試運行時使_trackAnalytics
function 可用於measurement
function。
如果您知道,請建議任何其他更好的方法。
當您的測試運行時, 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.