如何模拟 google datalayer.push 回调函数?

How do I mock a google datalayer.push callback function?

下面的代码片段显示了我运行 Google 优化 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.push 模拟 eventCallback 回调函数?

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

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

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

    window.dataLayer = {
      push: jest.fn().mockImplementation(config => {
        config.eventCallback();
      }),
    };

我设法用这个模拟并调用了回调。