Typescript 使tsconfig引用所有导出的变量(用于测试mock/spy/stub)
我有这样一个文件:Typescript 使tsconfig引用所有导出的变量(用于测试mock/spy/stub),typescript,Typescript,我有这样一个文件: import Foo from 'Foo.tsx'; export const useGroupIds = () => []; export default function GroupItem() { const groupIds = GroupItemModule.useGroupIds(); return <FooModule.default /> } import * as FooModule from './Foo'; import
import Foo from 'Foo.tsx';
export const useGroupIds = () => [];
export default function GroupItem() {
const groupIds = GroupItemModule.useGroupIds();
return <FooModule.default />
}
import * as FooModule from './Foo';
import * as GroupItemModule from './GroupItem';
jest.spyOn(FooModule, 'default')
jest.spyOn(GroupItemModule, 'useGroupIds')
Foo.tsx:
export default function Foo() {
return 'hi';
}
GroupItem.tsx:
import Foo from 'Foo.tsx';
export const useGroupIds = () => [];
export default function GroupItem() {
const groupIds = useGroupIds();
return <Foo />
}
所以现在当我这样嘲笑的时候:
import Foo from 'Foo.tsx';
export const useGroupIds = () => [];
export default function GroupItem() {
const groupIds = GroupItemModule.useGroupIds();
return <FooModule.default />
}
import * as FooModule from './Foo';
import * as GroupItemModule from './GroupItem';
jest.spyOn(FooModule, 'default')
jest.spyOn(GroupItemModule, 'useGroupIds')
然后将正确调用spied函数。在您的实现中有什么
GroupItemModule.UseGroupId
?您可以使用它而不是本地usegroupId
。这是故意的吗?@AluanHaddad谢谢你的回复。这就是我希望TS也能传输的示例。我希望它以这种方式调用每个导出。而不是通过上下文/范围捕获它,因为这样,即使在spy/stub之后,default
export中的用法也引用了原始(因此spied/stubbed永远不会被调用)类型,当然不会在导出该名称空间的成员的模块内合成名称空间,以便您可以引用它。考虑到闭包的性质,这也是一个相当不连贯的请求。这不会有任何区别。@AluanHaddad webpack会通过导出来实现这一点。它将其命名到模块上。我知道导出是如何通过webpack传输的。这不相关。