javascript - 使用 Jest 时,类型为 '"openURL"' 的参数不能分配给类型为 'never' 的参数
我在 Jest 中是初学者,这些是定义的类。APIService 类没有被导出;只定义了 openURL 函数。
API服务.ts
export const openURL = async (openURL : string) => {
await Linking.openURL(openURL );
};
注册页面.tsx
import{openURL} from '../APIService';
RegistrationPage.test.ts
test('should call function openURL with empty value', async () => {
const url = '';
const mockOpenURL = jest.fn();
mockOpenURL .mockImplementation(() => Promise.resolve(''));
const openURLSpy = jest.spyOn(openURL, 'openURL');
const mockURL = await openURL(url);
expect(mockOpenURL).toBeCalled();
expect(mockURL).toEqual(url);
expect(mockOpenURL).toHaveBeenCalledWith(url);
openURLSpy.mockRestore();
});
根据我的理解编写了这个函数,可能存在漏洞,因为没有正确地使用 mock 或 spy 来运行它,导致使用 Jest 时出现错误:类型为 '"openURL"' 的参数不能赋值给类型为 'never' 的参数
对改进此测试用例的建议将会很有帮助。
答案#1
仅仅在本地定义一个变量,比如 const mockOpenURL=jest.fn() 并不能模拟任何东西。
jest.spyOn(openURL, 'openURL') 失败,因为 openURL 是一个函数,并且没有 openURL.openURL 属性。
需要被模拟的是APIService模块:
import{openURL} from '../APIService';
jest.mock('../APIService', () => {
return {
__esModule: true,
openURL: jest.fn()
}
};
...
openURL.mockResolvedValue();
// code that calls openURL
答案#2
谢谢 @ jest.mock('../APIService.ts',() => { return { __esModule: true, openURL: jest.fn(), }; });
test('openURL function to be called with', async () => {
const openURL = 'www.google.com';
const openURL = jest.fn();
openURL.mockReturnValue(openURL );
});
