농담에서 모의 던지기 오류를 적절하게 만드는 방법은?
Jest를 이용하여 GraphQL api를 테스트하고 있습니다.
각 쿼리/뮤테이션마다 별도의 테스트 수트를 사용하고 있습니다.
저는 하나의 기능(즉, Meteor's)을 조롱하는 2개의 테스트(각각 별도의 테스트복을 입고)가 있습니다.callMethod
돌연변이에 사용됩니다.
it('should throw error if email not found', async () => {
callMethod
.mockReturnValue(new Error('User not found [403]'))
.mockName('callMethod');
const query = FORGOT_PASSWORD_MUTATION;
const params = { email: 'user@example.com' };
const result = await simulateQuery({ query, params });
console.log(result);
// test logic
expect(callMethod).toBeCalledWith({}, 'forgotPassword', {
email: 'user@example.com',
});
// test resolvers
});
내가.console.log(result)
알겠습니다.
{ data: { forgotPassword: true } }
이 행동은 내가 원하는 것이 아닙니다 왜냐하면.mockReturnValue
나는 오류를 던지고 따라서 예상합니다.result
오류 개체를 가지다
그러나 이 테스트 전에 다른 테스트를 실행합니다.
it('should throw an error if wrong credentials were provided', async () => {
callMethod
.mockReturnValue(new Error('cannot login'))
.mockName('callMethod');
그리고 잘 작동하고, 오류는 던져집니다.
시험이 끝난 후에 모의고사가 리셋되지 않는 것이 문제인 것 같습니다.나의jest.conf.js
있습니다clearMocks: true
각 테스트복은 별도의 파일로 되어 있으며, 다음과 같은 테스트 전에 기능을 모의 실험합니다.
import simulateQuery from '../../../helpers/simulate-query';
import callMethod from '../../../../imports/api/users/functions/auth/helpers/call-accounts-method';
import LOGIN_WITH_PASSWORD_MUTATION from './mutations/login-with-password';
jest.mock(
'../../../../imports/api/users/functions/auth/helpers/call-accounts-method'
);
describe('loginWithPassword mutation', function() {
...
갱신하다
교체할 때.mockReturnValue
와 함께.mockImplementation
모든 것이 예상대로 잘 풀렸습니다.
callMethod.mockImplementation(() => {
throw new Error('User not found');
});
하지만 그것이 왜 또 다른 검사에서.mockReturnValue
잘 작동합니다...
바꾸다.mockReturnValue
와 함께.mockImplementation
:
yourMockInstance.mockImplementation(() => {
throw new Error();
});
당신이 주장하고 싶은 경우에는
test('the fetch fails with an error', () => {
return expect(fetchData()).rejects.toMatch('error');
});
약속이라면 할 수도 있습니다. rejects www.jestjs.io/docs/en/asynchronous#resolves--rejects
약속은 https://jestjs.io/docs/mock-function-api#mockfnmockrejectedvaluevalue 을 사용할 수 있습니다.
test('async test', async () => {
const asyncMock = jest.fn().mockRejectedValue(new Error('Async error'));
await asyncMock(); // throws "Async error"
});
오류가 발생했는지 여부를 테스트하려면 https://eloquentcode.com/expect-a-function-to-throw-an-exception-in-jest 을 사용할 수 있습니다.
const func = () => {
throw new Error('my error')
}
it('should throw an error', () => {
expect(func).toThrow()
})
각도 + 재스트의 경우:
import { throwError } from 'rxjs';
yourMockInstance.mockImplementation(() => {
return throwError(new Error('my error message'));
});
꼭 덧붙입니다throw new Error('Network error or something')
둘 중 하나에catch
차단 또는 조건부로
import fetchApi from '../src'
it("should throw error", async () => {
const errorMessage: string = "Network Error";
(axios.post as jest.Mock).mockRejectedValueOnce(new Error(errorMessage));
expect(async () => await fetchApi()).rejects.toThrow(
errorMessage
);
});
언급URL : https://stackoverflow.com/questions/49835264/how-to-properly-make-mock-throw-an-error-in-jest
'source' 카테고리의 다른 글
부모의 패딩을 무시하는 절대 포지셔닝 (0) | 2023.10.12 |
---|---|
불변 위반:텍스트 문자열은 구성 요소 내에서 렌더링되어야 합니다. (0) | 2023.10.12 |
ConstraintLayout 제약 조건 종속 뷰가 사라지면 레이아웃 뷰가 이상하게 동작합니다. (0) | 2023.10.12 |
사이트 간 AJAX 요청 (0) | 2023.10.12 |
Oracle STANDARD_PLSQL에서 해시를 사용할 수 없습니까? (0) | 2023.10.12 |