【问题标题】:Not able to access variables in jest.mock function无法访问 jest.mock 函数中的变量
【发布时间】:2020-03-13 15:56:12
【问题描述】:

请检查以下场景

const url = 'https://mock.com/mockpath';
jest.mock('../../src/somefile', () => {
  return ({
    getURL: jest.fn(() => url),
  });
});

我遇到错误

babel-plugin-jest-hoist: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables.
Invalid variable access: url

【问题讨论】:

  • 你用的是什么版本?它是你的测试中的佼佼者吗?名称以mock should be allowed开头的变量
  • 非常感谢,我的变量前面没有模拟。刚刚添加了模拟并解决了问题。
  • 所有赞美@skyboyer !说真的,谢谢。

标签: reactjs unit-testing mocking jestjs


【解决方案1】:

礼貌@skyboyer

刚刚将 url 重命名为 mockUrl,任何以 mock 开头的变量都可以在 jest.mock 中访问。

@skyboyer再次感谢您的帮助。

【讨论】:

  • 顺便说一句,您仍然可以为每个测试用例的因变量提供不同的值(这对于基本 URL 几乎没有意义,但在其他情况下可能有用)。您只需要确保 jest.mock 和测试用例都访问引用相同的变量
  • let mockSmth = { value: 5 }; jest.mock(.... mockSmt.value ... ); .... it(.... mockSmth.value = 5; ... - 注意变量mockSmth引用始终相同
  • 我在一家大型科技公司的遥控椅上崇拜你。你救了我几个小时!!!
【解决方案2】:
'jest.mock()' is not allowed to reference any out-of-scope variables. Invalid variable access: mockURL

它告诉您jest.mock() 正在尝试访问mockURL,但不允许访问超出范围的变量。

您应该在jest.mock() 函数调用中声明mockURL

jest.mock('../../src/somefile', () => {
  const mockURL = 'https://mock.com/mockpath';
  return ({
    getURL: jest.fn(() => mockURL),
  });
});

或者你可以只引用字符串而不使用中间变量:

jest.mock('../../src/somefile', () => ({
  getURL: jest.fn(() => 'https://mock.com/mockpath'),
}));

【讨论】:

  • 为了避免代码冗余,我需要 jest.mock 中的变量,因为稍后我将使用该变量
  • 你做不到。如果您在jest.mock 中使用变量,则必须在jest.mock 中声明它。有关说明,请参阅 this thread
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多