gpt4 book ai didi

typescript - 如何模拟带有 typescript 命名空间的模块?

转载 作者:行者123 更新时间:2023-12-02 16:50:38 24 4
gpt4 key购买 nike

这是被测函数:

import * as firebase from 'firebase';

function signInWithGoogle() {
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithRedirect(provider);
}

firebase 具有以下类型定义:

declare namespace firebase.auth 

function auth(app?: firebase.app.App): firebase.auth.Auth;
jest.mock('firebase', () => {
// Don't know how to mock, what should be returned?
})

我需要 firebase 的模拟 firebase.auth.GoogleAuthProvider()firebase.auth()signInWithRedirect 方法。

但是 firebase.auth 可以是对象或函数。 jest.mockfactory 应该返回什么?

jestjs 是否支持这种 mock 或 spy?谢谢大家。

最佳答案

Javascript 函数是函数类型的对象。您可以为每个对象分配属性,这样您就可以将其模拟为:

jest.mock('firebase', () => {
const auth = jest.fn();
auth.GoogleAuthProvider = jest.fn();
auth.Auth = jest.fn();
return { auth };
});

或者你可以使用 Jest 的不带工厂函数的自动模拟:

jest.mock('firebase');

然后模拟实现

// based on your question (not tested)
firebase.auth.mockImplementation(() => new firebase.auth.Auth())

关于typescript - 如何模拟带有 typescript 命名空间的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58873758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com