0

有没有办法动态更新next/router/jest.mock 查询?

我本质上是在尝试根据运行的测试模拟不同的查询。

IE

    jest.mock('next/router', () => ({
        useRouter() {
            return {
                query: {
                    'block-number': ['block', '1']
                }
            };
        }
    }));

describe('test block 1 ', () => {
    test('Renders block 1', async () => {
 
        });
    });

上面的模拟应该为描述块 1 运行

然后应该更新模拟以使用不同的查询运行块2,即

jest.mock('next/router', () => ({
        useRouter() {
            return {
                query: {
                    'block-number': ['block', '2']
                }
            };
        }
    }));

describe('test block 2 ', () => {
    test('Renders block 2', async () => {
 
        });
    });

所以本质上我希望能够更新 jest.mock 中的查询

4

1 回答 1

0

您正在寻找的是mockImplementationOncemockReturnValueOnce

import { useRouter } from 'next/router';
jest.mock('next/router', () => {
  return {
    ...jest.requireActual('next/router'),
    useRouter: jest.fn(() => ({
      query: 'initial',
    })),
});

describe('wrapper', () => {
  beforeEach(() => {
    useRouter.mockClear();
  });

  describe('one', () => {
    test('does one', () => {
      useRouter.mockReturnValueOnce({ query: '' });
      // expectations...
    });
  });

  describe('two', () => {
    test('does two', () => {
      useRouter.mockReturnValueOnce({ query: 'something-diff' });
      // expectations...
    });
  });
});

您可能需要调整模拟,我不确定确切的返回值应该是什么,但这应该让您走上正确的道路。

于 2021-10-13T12:18:16.783 回答