【问题标题】:How to make Bootstrapper object of window be available for unit testing?如何使窗口的 Bootstrapper 对象可用于单元测试?
【发布时间】:2020-08-07 18:06:09
【问题描述】:

我的项目中有一个函数,它从窗口的引导程序对象中调用一个函数。下面是函数:

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

我开玩笑地写了下面的代码来对这个函数进行单元测试:

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);
  })
})

对于来自测量函数调用的结果变量,我得到“未定义”,因为我无法在运行时使 window.measurement._trackAnalytics 函数可用于 measurement 函数。

我想知道:

  1. 我的方法对这个场景进行单元测试是否正确?如果是,如何在单元测试运行时使_trackAnalytics 函数可用于measurement 函数。

  2. 如果您知道,请提出任何其他更好的方法。

【问题讨论】:

    标签: javascript unit-testing express jestjs


    【解决方案1】:

    当您的测试运行时,window.measurement._trackAnalytics 函数确实可用于 measurement 函数。否则,你会得到一个 TypeError 来调用不是函数的东西。

    问题是在measurement 方法中没有返回任何内容。调用了_trackAnalytics 方法,但不返回其结果。这就是为什么您将undefined 设为result

    为了检查它是否确实被调用,我会使用jest mock 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。您正在检查它是否等于函数,而不是检查typeof。我认为这条线应该看起来:
    if (typeof window.Bootstrapper._trackAnalytics === 'function') {
    

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 2014-05-02
      相关资源
      最近更新 更多