Ember addon for mocking GraphQL requests using Mock Service Worker (MSW).
- Ember.js v4.8 or above
- Embroider or ember-auto-import v2
- MSW v2 or above
npm install -D @bagaar/ember-graphql-mocking mswpnpm add -D @bagaar/ember-graphql-mocking mswyarn add -D @bagaar/ember-graphql-mocking mswIn tests/test-helper.js:
- Import
setupEmberGraphqlMocking - Import your GraphQL schema
- Call
setupEmberGraphqlMockingwith your GraphQL schema
// tests/test-helper.js
import Application from 'my-app/app';
import config from 'my-app/config/environment';
import * as QUnit from 'qunit';
import { setApplication } from '@ember/test-helpers';
import { setup } from 'qunit-dom';
import { start } from 'ember-qunit';
import { setupEmberGraphqlMocking } from '@bagaar/ember-graphql-mocking/test-support'; // 1.
import schema from 'my-app/graphql/schema'; // 2.
QUnit.begin(() => setupEmberGraphqlMocking(schema)); // 3.
setApplication(Application.create(config.APP));
setup(QUnit.assert);
start();Note
Make sure to use QUnit.begin, as setupEmberGraphqlMocking returns a Promise.
If you want to pass along additional start options
to MSW's service worker, you can do so by defining an mswStartOptions object:
QUnit.begin(() =>
setupEmberGraphqlMocking(schema, {
mswStartOptions: {
// Additional MSW start options...
},
})
);- Import
mockResolversandsetupGraphqlTest - Call
setupGraphqlTestwithhooks - Call
mockResolversto mock the necessary resolver(s) per test
setupGraphqlTest will make sure that all resolvers are cleared in between tests.
mockResolvers accepts an object that consists of one or more resolvers. The key must be the name of the mocked operation, the value can either be a response object or a function that returns a response object.
Note
Make sure that your operations are named in order for @bagaar/ember-graphql-mocking to function properly.
// tests/acceptance/my-acceptance-test.js
import { module, test } from 'qunit';
import { visit, currentURL } from '@ember/test-helpers';
import { setupApplicationTest } from 'my-app/tests/helpers';
import { mockResolvers, setupGraphqlTest } from '@bagaar/ember-graphql-mocking/test-support'; // 1.
module('Acceptance | ember-graphql-mocking', function (hooks) {
setupApplicationTest(hooks);
setupGraphqlTest(hooks); // 2.
test('visiting /', async function (assert) {
mockResolvers({ // 3.
me: {
id: '1',
firstName: 'John',
lastName: 'Doe',
},
});
await visit('/');
assert.strictEqual(currentURL(), '/');
assert.dom('[data-test-me-id]').hasText('1');
assert.dom('[data-test-me-first-name]').hasText('John');
assert.dom('[data-test-me-last-name]').hasText('Doe');
});
});Note
Calling mockResolvers multiple times within a single test, will simply merge all resolvers into a single root.
Note
Working versions of these code examples can be found in this addon's test app.
See the Contributing guide for details.
This project is licensed under the MIT License.