繁体   English   中英

jest.fn() 的别名?

[英]Aliases for jest.fn()?

我有两个不同的库用于在 Jest 中进行模拟。 这些库具有相同的名为get函数。 这是我当前实现的一个问题,因为get被两个不同的库使用,是否可以使用模拟函数的别名(jest.fn())或者某种不会破坏当前实现完整性的解决方法?

这是我目前的实现,如果可能的话,我想保持这种方式:

let get: jest.Mock<{}>
jest.mock('rxjs/ajax', () => {
  get = jest.fn()
  return { ajax: { get } }
})

let get as cookieGet: jest.Mock<()> // Can I do something like this 
jest.mock('js-cookie', () => {
  get = jest.fn()
  return { get }
})

我不太熟悉 JS 中的别名,或者他们 Jest 处理这样的事情,所以非常感谢任何帮助。

如果会导致名称冲突,则没有必要对对象字面量使用{ get }速记属性语法。

另一个问题是变量需要有mock前缀才能在jest.mock工厂函数的范围内使用。 正如文档所述,

factory 参数的一个限制是,因为对 jest.mock() 的调用被提升到文件的顶部,所以不可能先定义一个变量然后在工厂中使用它。 以单词“mock”开头的变量是一个例外。 由您来保证它们会按时初始化!

有可能:

import ... from 'rxjs/ajax';
import ... from 'js-cookie';

let mockRxAjaxGet: jest.Mock<{}>

jest.mock('rxjs/ajax', () => {
  mockRxAjaxGet = jest.fn()
  return { ajax: { get: mockRxAjaxGet } }
})

let mockJsCookieGet: jest.Mock<()>
jest.mock('js-cookie', () => {
  mockJsCookieGet = jest.fn()
  return { get: mockJsCookieGet }
})

问题是,一旦jest.mock被提升到导入之上,当let变量处于时间死区并且无法分配时,它将被评估。

所以let最好改成var ,它被提升了。 或者像往常一样导入get as jest.Mock<...>函数,并在需要间谍的地方与get as jest.Mock<...>使用。 mocked助手可用于强制执行 TypeScript 类型安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM