我有这个组件,我试图测试,但无论我try 什么,我得到的错误:
import {useEffect, useState} from 'react';
import {useUser} from '.';
/**
* Check If the company is locked
*/
export const useIsCompanyLocked = (): boolean => {
const userInfo = useUser();
const [status, setStatus] = useState(false);
useEffect(() => {
if (!userInfo) {
return;
}
(async (): Promise<void> => {
setStatus(false);
// Do some stuff
setStatus('do some condition which returns a boolean result');
})();
}, [userInfo, status]);
return status;
};
下面是我的jest测试,但失败了:
/**
* @jest-environment jsdom
*/
import {useIsCompanyLocked} from '../useIsCompanyLocked';
import {mockUseUser} from '@myTest/test-utilities';
import React from 'react';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const appUtils = require('@myTest/app-utilities');
describe('useUserHasSecurityPermissionForCompany', () => {
const setStatus = jest.fn();
let useStateSpy: any;
beforeEach(() => {
useStateSpy = jest.spyOn(React, 'useState');
useStateSpy.mockImplementation((initialState: any) => [initialState, setStatus]);
});
it('should return "false" if user is Admin', () => {
let mockUser = mockUseUser();
mockUser = {
...mockUser,
isAdmin: true
]
};
jest.spyOn(appUtils, 'useUser').mockReturnValue(mockUser);
const obj = useIsCompanyLocked();
expect(obj).toEqual(false);
});
});
我已经try 了这个测试的许多不同的迭代,但我总是以一些错误结束.测试这个函数'useIsCompanyLocked'的正确方法是什么?
这是我得到的错误:
Summary of all failing tests
FAIL src/hooks/__tests__/useIsCompanyLocked.test.tsx (10.631s)
● useIsCompanyLocked › should return "false" if user is Admin
expect(received).toEqual(expected) // deep equality
Expected: false
Received: [false, [Function mockConstructor]]
39 | jest.spyOn(appUtils, 'useUser').mockReturnValue(mockUser);
40 | const obj = useIsCompanyLocked();
> 41 | expect(obj).toEqual(false);
| ^
42 | });
43 |
at Object.<anonymous> (src/hooks/__tests__/useIsCompanyLocked.test.tsx:41:17)