Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 18e4b74

Browse files
author
Sashko Stubailo
committed
Actually use Jest mocks
1 parent 74d767f commit 18e4b74

File tree

3 files changed

+66
-54
lines changed

3 files changed

+66
-54
lines changed

.eslintrc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"import/prefer-default-export": 0,
1313
"import/no-extraneous-dependencies": 0,
1414
"import/imports-first": 0,
15-
"no-use-before-define": 0
15+
"no-use-before-define": 0,
16+
"no-underscore-dangle": 0
1617
}
1718
}

__mocks__/request-promise.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
let requestQueue = [];
2+
3+
export default function rp(requestOptions) {
4+
// Ensure we expected to get more requests
5+
expect(requestQueue.length).not.toBe(0);
6+
7+
const nextRequest = requestQueue.shift();
8+
// Ensure this is the request we expected
9+
expect(requestOptions).toEqual(nextRequest.options);
10+
11+
return new Promise((resolve, reject) => {
12+
if (nextRequest.result) {
13+
resolve(nextRequest.result);
14+
} else if (nextRequest.error) {
15+
reject(nextRequest.error);
16+
} else {
17+
throw new Error('Mocked request must have result or error.');
18+
}
19+
});
20+
}
21+
22+
function pushMockRequest({ options, result, error }) {
23+
const defaultOptions = {
24+
json: true,
25+
headers: {
26+
'user-agent': 'GitHunt',
27+
},
28+
resolveWithFullResponse: true,
29+
};
30+
const { uri, ...rest } = options;
31+
32+
const url = `https://api.github.com${uri}`;
33+
34+
requestQueue.push({
35+
options: {
36+
...defaultOptions,
37+
...rest,
38+
uri: url,
39+
},
40+
result,
41+
error,
42+
});
43+
}
44+
45+
function flushRequestQueue() {
46+
requestQueue = [];
47+
}
48+
49+
function noRequestsLeft() {
50+
expect(requestQueue.length).toBe(0);
51+
}
52+
53+
rp.__pushMockRequest = pushMockRequest; // eslint-disable-line no-underscore-dangle
54+
rp.__flushRequestQueue = flushRequestQueue; // eslint-disable-line no-underscore-dangle
55+
rp.__noRequestsLeft = noRequestsLeft; // eslint-disable-line no-underscore-dangle

api/github/connector.test.js

Lines changed: 9 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,14 @@
1-
import { GitHubConnector } from './connector';
2-
3-
let requestQueue = [];
4-
5-
function mockRequestPromise(requestOptions) {
6-
// Ensure we expected to get more requests
7-
expect(requestQueue.length).not.toBe(0);
8-
9-
const nextRequest = requestQueue.shift();
10-
// Ensure this is the request we expected
11-
expect(requestOptions).toEqual(nextRequest.options);
1+
import rp from 'request-promise';
122

13-
return new Promise((resolve, reject) => {
14-
if (nextRequest.result) {
15-
resolve(nextRequest.result);
16-
} else if (nextRequest.error) {
17-
reject(nextRequest.error);
18-
} else {
19-
throw new Error('Mocked request must have result or error.');
20-
}
21-
});
22-
}
23-
24-
function pushMockRequest({ options, result, error }) {
25-
const defaultOptions = {
26-
json: true,
27-
headers: {
28-
'user-agent': 'GitHunt',
29-
},
30-
resolveWithFullResponse: true,
31-
};
32-
const { uri, ...rest } = options;
33-
34-
const url = `https://api.github.com${uri}`;
35-
36-
requestQueue.push({
37-
options: {
38-
...defaultOptions,
39-
...rest,
40-
uri: url,
41-
},
42-
result,
43-
error,
44-
});
45-
}
46-
47-
GitHubConnector.mockRequestPromise = mockRequestPromise;
3+
import { GitHubConnector } from './connector';
484

495
describe('GitHub connector', () => {
506
beforeEach(() => {
51-
requestQueue = [];
7+
rp.__flushRequestQueue();
528
});
539

5410
afterEach(() => {
55-
expect(requestQueue.length).toBe(0);
11+
rp.__noRequestsLeft();
5612
});
5713

5814
it('can be constructed', () => {
@@ -62,7 +18,7 @@ describe('GitHub connector', () => {
6218
it('can load one endpoint', () => {
6319
const connector = new GitHubConnector();
6420

65-
pushMockRequest({
21+
rp.__pushMockRequest({
6622
options: { uri: '/endpoint' },
6723
result: {
6824
headers: {},
@@ -78,7 +34,7 @@ describe('GitHub connector', () => {
7834
it('fetches each endpoint only once per instance', () => {
7935
const connector = new GitHubConnector();
8036

81-
pushMockRequest({
37+
rp.__pushMockRequest({
8238
options: {
8339
uri: '/endpoint',
8440
},
@@ -108,7 +64,7 @@ describe('GitHub connector', () => {
10864
clientSecret: 'fake_client_secret',
10965
});
11066

111-
pushMockRequest({
67+
rp.__pushMockRequest({
11268
options: {
11369
uri: '/endpoint',
11470
qs: {
@@ -133,7 +89,7 @@ describe('GitHub connector', () => {
13389
const connector = new GitHubConnector();
13490
const etag = 'etag';
13591

136-
pushMockRequest({
92+
rp.__pushMockRequest({
13793
options: {
13894
uri: '/endpoint',
13995
},
@@ -149,7 +105,7 @@ describe('GitHub connector', () => {
149105

150106
const connector2 = new GitHubConnector();
151107

152-
pushMockRequest({
108+
rp.__pushMockRequest({
153109
options: {
154110
uri: '/endpoint',
155111
headers: {

0 commit comments

Comments
 (0)