Skip to content

Commit

Permalink
Add 'resolveOnNextTick' to use in tests (graphql#2778)
Browse files Browse the repository at this point in the history
instead of Node.js specific methods
  • Loading branch information
IvanGoncharov authored Sep 1, 2020
1 parent fbe8402 commit 4f26a6b
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 18 deletions.
21 changes: 21 additions & 0 deletions src/__testUtils__/__tests__/resolveOnNextTick-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { expect } from 'chai';
import { describe, it } from 'mocha';

import resolveOnNextTick from '../resolveOnNextTick';

describe('resolveOnNextTick', () => {
it('resolves promise on the next tick', async () => {
const output = [];

const promise1 = resolveOnNextTick().then(() => {
output.push('second');
});
const promise2 = resolveOnNextTick().then(() => {
output.push('third');
});
output.push('first');

await Promise.all([promise1, promise2]);
expect(output).to.deep.equal(['first', 'second', 'third']);
});
});
3 changes: 3 additions & 0 deletions src/__testUtils__/resolveOnNextTick.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default function resolveOnNextTick(): Promise<void> {
return Promise.resolve(undefined);
}
6 changes: 1 addition & 5 deletions src/execution/__tests__/executor-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,7 @@ describe('Execute: Handles basic execution tasks', () => {
};

function promiseData() {
return new Promise((resolve) => {
process.nextTick(() => {
resolve(data);
});
});
return Promise.resolve(data);
}

const DataType = new GraphQLObjectType({
Expand Down
20 changes: 8 additions & 12 deletions src/execution/__tests__/mutations-test.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { expect } from 'chai';
import { describe, it } from 'mocha';

import resolveOnNextTick from '../../__testUtils__/resolveOnNextTick';

import { parse } from '../../language/parser';

import { GraphQLInt } from '../../type/scalars';
Expand Down Expand Up @@ -29,24 +31,18 @@ class Root {
return this.numberHolder;
}

promiseToChangeTheNumber(newNumber: number): Promise<NumberHolder> {
return new Promise((resolve) => {
process.nextTick(() => {
resolve(this.immediatelyChangeTheNumber(newNumber));
});
});
async promiseToChangeTheNumber(newNumber: number): Promise<NumberHolder> {
await resolveOnNextTick();
return this.immediatelyChangeTheNumber(newNumber);
}

failToChangeTheNumber(): NumberHolder {
throw new Error('Cannot change the number');
}

promiseAndFailToChangeTheNumber(): Promise<NumberHolder> {
return new Promise((_resolve, reject) => {
process.nextTick(() => {
reject(new Error('Cannot change the number'));
});
});
async promiseAndFailToChangeTheNumber(): Promise<NumberHolder> {
await resolveOnNextTick();
throw new Error('Cannot change the number');
}
}

Expand Down
6 changes: 5 additions & 1 deletion src/subscription/__tests__/subscribe-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import EventEmitter from 'events';
import { expect } from 'chai';
import { describe, it } from 'mocha';

import resolveOnNextTick from '../../__testUtils__/resolveOnNextTick';

import type { DocumentNode } from '../../language/ast';
import { parse } from '../../language/parser';

Expand Down Expand Up @@ -244,7 +246,7 @@ describe('Subscription Initialization Phase', () => {
importantEmail: {
type: GraphQLString,
subscribe: async () => {
await new Promise(setImmediate);
await resolveOnNextTick();
return eventEmitterAsyncIterator(pubsub, 'importantEmail');
},
},
Expand All @@ -262,6 +264,8 @@ describe('Subscription Initialization Phase', () => {
`),
});

expect(subscription).to.have.property('next');

pubsub.emit('importantEmail', {
importantEmail: {},
});
Expand Down

0 comments on commit 4f26a6b

Please sign in to comment.