Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jest.fn()的别名?_Javascript_Typescript_Unit Testing_Jestjs_Coding Style - Fatal编程技术网

Javascript jest.fn()的别名?

Javascript jest.fn()的别名?,javascript,typescript,unit-testing,jestjs,coding-style,Javascript,Typescript,Unit Testing,Jestjs,Coding Style,我有两个不同的库,我用它们来开玩笑。这些库具有相同的函数,称为get。这是我当前实现的一个问题,因为两个不同的库使用了get,是否可以为模拟函数(jest.fn())使用别名,或者可能是某种不会破坏当前实现完整性的解决方法 以下是我目前的实施情况,如果可能,我希望保持这种方式: let get: jest.Mock<{}> jest.mock('rxjs/ajax', () => { get = jest.fn() return { ajax: { get } } })

我有两个不同的库,我用它们来开玩笑。这些库具有相同的函数,称为
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 }
})
let get:jest.Mock
jest.mock('rxjs/ajax',()=>{
get=jest.fn()
返回{ajax:{get}
})
让我们成为cookieGet:开玩笑。模仿//我能做这样的事吗
jest.mock('js-cookie',()=>{
get=jest.fn()
返回{get}
})

我对JS中的别名不太熟悉,或者它们会处理类似的事情,因此非常感谢您的帮助。

如果对象文字导致名称冲突,则无需使用
{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 }
})
导入。。。来自“rxjs/ajax”;
导入。。。来自“JSCookie”;
让mockRxAjaxGet:jest.Mock
jest.mock('rxjs/ajax',()=>{
mockRxAjaxGet=jest.fn()
返回{ajax:{get:mockRxAjaxGet}
})
让mockJsCookieGet:开玩笑,Mock
jest.mock('js-cookie',()=>{
mockJsCookieGet=jest.fn()
返回{get:mockJsCookieGet}
})
问题是,一旦将
jest.mock
提升到导入上方,当
let
变量处于时间死区且无法分配时,将对其进行评估

因此,最好将
let
更改为
var
,然后将其提升。或者,可以像往常一样导入模拟函数,并与
get as jest.Mock
一起使用,其中需要间谍。可用于强制执行TypeScript类型安全