1

下面的代码片段显示了我运行 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 中,我如何模拟eventCallback回调函数window.dataLayer.push

4

2 回答 2

0

所以在测试中我们称之为windowas global。所以你可以尝试像这样嘲笑:

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

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

于 2020-06-10T07:28:25.830 回答
0
    window.dataLayer = {
      push: jest.fn().mockImplementation(config => {
        config.eventCallback();
      }),
    };

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

于 2020-06-12T01:13:49.970 回答