我有一个自定义 MUI 5 组件库 NPM 包,它导出一些使用 MUI 5 构建的基本组件,导出主题文件并将主题提供程序包装到可重用组件中,如下所示:
import { ThemeProvider } from 'styled-components';
import { StyledEngineProvider } from '@mui/material/styles';
import { theme as defaultTheme } from './theme';
function CustomThemeProvider(props: {
theme: any;
children: JSX.Element[];
}): JSX.Element {
const { theme = defaultTheme, children } = props;
return (
<StyledEngineProvider injectFirst>
<ThemeProvider theme={theme}>{children}</ThemeProvider>
</StyledEngineProvider>
);
}
export default CustomThemeProvider;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用此自定义主题提供程序以及使用此共享库的项目中的组件时,主题根本不应用。这种方法确实适用于 MUI 4,但当时没有情感层,设置也简单得多。
我已将所有这些添加到共享组件包的对等依赖项中,以保持引用完整。
"peerDependencies": {
"@emotion/react": "^11.7.1",
"@emotion/styled": "^11.6.0",
"@mui/icons-material": "^5.2.4",
"@mui/lab": "^5.0.0-alpha.60",
"@mui/styles": "^5.2.3",
"@mui/material": "^5.2.4", …Run Code Online (Sandbox Code Playgroud) 我有一个控制器,它通过控制器构造函数中的依赖项注入使用 NestJS 内置 Logger:
constructor(private readonly logger: Logger)
Run Code Online (Sandbox Code Playgroud)
我希望能够在 Jest 测试中模拟它,以查看在日志记录期间调用了哪些方法以及使用哪些参数。我尝试了这个语法:
providers[{
provide: Logger,
useValue: {
log: jest.fn(),
}
}]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这一行:
expect(Logger).toHaveBeenCalledTimes(1);
Run Code Online (Sandbox Code Playgroud)
返回: 匹配器错误:接收到的值必须是模拟或间谍函数
任何帮助将不胜感激!