anyproxy/test/rule/onError.spec.js
2020-01-20 19:57:38 +08:00

61 lines
1.6 KiB
JavaScript

const { basicProxyRequest, proxyServerWithRule, } = require('../util.js');
const jestMockErrorFn = jest.fn();
const jestMockConnectErrorFn = jest.fn();
const ERROR_PAGE_IN_RULE = 'this is my error page';
const rule = {
onConnectError: jestMockConnectErrorFn,
*onError(requestDetail, error) {
jestMockErrorFn(requestDetail, error);
return {
response: {
statusCode: '200',
header: {},
body: ERROR_PAGE_IN_RULE,
}
};
},
*beforeDealHttpsRequest(requestDetail) {
return requestDetail.host.indexOf('intercept') === 0;
},
};
describe('Rule replaceResponseData', () => {
let proxyServer;
let proxyPort;
let proxyHost;
beforeAll(async () => {
proxyServer = await proxyServerWithRule(rule);
proxyPort = proxyServer.proxyPort;
proxyHost = `http://localhost:${proxyPort}`;
});
afterAll(() => {
return proxyServer && proxyServer.close();
});
it('should get error', async () => {
const url = 'https://intercept.anyproxy_not_exists.io/some_path';
const result = await basicProxyRequest(proxyHost, 'GET', url);
const proxyRes = result.response;
const body = result.body;
expect(proxyRes.statusCode).toBe(200);
expect(body).toBe(ERROR_PAGE_IN_RULE);
expect(jestMockErrorFn.mock.calls.length).toBe(1);
});
it('should get connec error', async () => {
const url = 'https://anyproxy_not_exists.io/do_not_intercept';
let e;
try {
await basicProxyRequest(proxyHost, 'GET', url);
} catch (err) {
e = err;
}
expect(e).not.toBeUndefined();
expect(jestMockConnectErrorFn.mock.calls.length).toBe(1);
});
});