import { Response } from '@cloudpss/fetch'; import { RequestResponseError } from '../../dist/index.js'; import { GraphqlError, wrapError } from '../../dist/gql/error.js'; describe('create graphql error', () => { it('simple error', () => { const init = {}; const request = { url: 'xx/gql', query: 'query{}', variables: {} }; const response = new Response(undefined, { status: 369 }); const error = new GraphqlError( request, { requestUrl: 'xxx', requestInit: init, status: 369, response, data: null, }, { message: 'graphql error' }, ); expect(error.cause).toBeUndefined(); expect(error.message).toBe('graphql error'); expect(error.name).toBe('GraphqlError'); expect(error.requestInit).toBe(init); expect(error.requestUrl).toBe('xxx'); expect(error.response).toBe(response); expect(error.status).toBe(369); expect(error.request).toBe(request); }); }); describe('wrap graphql error', () => { it('simple error', () => { const wrapped = new Error('simple error'); const request = { url: 'xx/gql', query: 'query{}', variables: {} }; const error = wrapError(wrapped, request); expect(error).toBe(wrapped); expect(error.message).toBe('simple error'); expect(error.name).toBe('Error'); expect(error.request).toBe(request); }); it('simple string', () => { const wrapped = 'simple error'; const request = { url: 'xx/gql', query: 'query{}', variables: {} }; // @ts-expect-error 处理 string 类型 const error = wrapError(wrapped, request); expect(error.message).toBe('simple error'); expect(error.name).toBe('Error'); expect(error.request).toBe(request); }); it('simple null', () => { const wrapped = null; const request = { url: 'xx/gql', query: 'query{}', variables: {} }; // @ts-expect-error 处理 null 类型 const error = wrapError(wrapped, request); expect(error.message).toBe(''); expect(error.name).toBe('Error'); expect(error.request).toBe(request); }); it('simple error like', () => { const wrapped = { message: 'simple error', name: 'Error' }; const request = { url: 'xx/gql', query: 'query{}', variables: {} }; const error = wrapError(wrapped, request); expect(error).not.toBe(wrapped); expect(error.message).toBe('simple error'); expect(error.name).toBe('Error'); expect(error.request).toBe(request); }); it('with response', () => { const init = {}; const wrapped = 'simple error'; const request = { url: 'xx/gql', query: 'query{}', variables: {} }; const response = new Response(undefined, { status: 369 }); const error = wrapError(wrapped as unknown as RequestResponseError, request, { requestUrl: 'xxx', requestInit: init, status: 369, response, data: null, }); expect(error).toBeInstanceOf(RequestResponseError); expect(error.message).toBe('simple error'); expect(error.name).toBe('RequestResponseError'); expect(error.requestInit).toBe(init); expect(error.requestUrl).toBe('xxx'); expect(error.response).toBe(response); expect(error.status).toBe(369); expect(error.request).toBe(request); }); });