【问题标题】:How do I mock a google datalayer.push callback function?如何模拟 google datalayer.push 回调函数?
【发布时间】:2020-06-10 07:21:53
【问题描述】:

下面的 sn-p 显示了我运行 Google Optimize AB 测试的 React 挂钩文件。

export default function useGetABExperimentType(experimentId) {
  const [experimentType, setExperimentType] = useState('0');

  useEffect(() => {
    if (window && window.dataLayer) {
      window.dataLayer.push({
        event: 'optimize.activate',
        eventCallback: () => {
          mySideEffectFunction();
        },
      });
    }
  }, []);

  return experimentType;
}

我正在尝试测试我的 mySideEffectFunction() 函数是否调用以增加测试覆盖率。 在 Jest 中,如何模拟来自 window.dataLayer.pusheventCallback 回调函数?

【问题讨论】:

    标签: javascript reactjs jestjs google-optimize


    【解决方案1】:
        window.dataLayer = {
          push: jest.fn().mockImplementation(config => {
            config.eventCallback();
          }),
        };
    

    我设法用这个来模拟和调用回调。

    【讨论】:

      【解决方案2】:

      所以在测试中我们将window 称为global。所以你可以尝试像这样模拟:

      declare global {
          interface Window {
              dataLayer: {
                 push: jest.fn().mockImplementation(() => {
                               eventCallback: jest.fn()
                       })
              }
          }
      }
      

      我没有对此进行测试,但实际上是在模拟 dataLayer 对象,然后模拟其中的函数并模拟实现。那么你应该能够测试是否调用了模拟函数

      【讨论】:

      • 谢谢。这设法模拟它,但 eventCallback 没有调用。
      猜你喜欢
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      相关资源
      最近更新 更多