Does it works all together (routing, components, services, api calls)
ACCEPTANCE TESTING
Michał Czyż
Does it works all together (routing, components, services, api calls)
ACCEPTANCE TESTING
https://twitter.com/gdinwiddie/status/690726656449839104
ember test
cleaning up...
Built project successfully. Stored in "/Users/michalczyz/projects/ember/my-todo-list/tmp/class-tests_dist-M2jSkE8j.tmp".
# tests 0
# pass 0
# skip 0
# fail 0
Mirage
Mock
Test Helpers
ember-simple-auth
Page
Object
ES2017
Acceptance
Integration
Unit
Acceptance
Unit
Integration
Testing Triangle
SPA Testing
import { describe, it, beforeEach, afterEach } from 'mocha';
import { expect } from 'chai';
import { before, after } from 'cl-app/tests/helpers/module-for-acceptance-authenticated';
import page from 'cl-app/tests/pages/mail-logs';
describe('Acceptance | mail logs', function() {
this.timeout(7000);
beforeEach(before);
afterEach(after);
it('/mail-logs works', async function() {
server.create('category', { name: 'office' });
server.create('company', { name: 'selleo inc.' });
server.createList('mailLog', 10);
await page.visit();
// LISTING
expect(currentURL()).to.equal('/mail-logs');
expect(page.mailLogCount).to.equal(10);
// ADD
await page.formNew()
.fillExternalNumber('200-212-123')
.selectCompany('selleo')
.selectCategory('office')
.submit();
expect(page.mailLogCount).to.equal(11);
expect(page.onMailLog(10).text).to.include('200-212-123');
expect(server.db.mailLogs[10].externalNumber).to.equal('200-212-123');
// EDIT
await page.onMailLog(1).click()
.formEdit()
.fillExternalNumber('300-323-234')
.submit();
expect(page.onMailLog(1).text).to.include('300-323-234');
expect(server.db.mailLogs[1].externalNumber).to.equal('300-323-234');
});
});
describe('Acceptance | mail logs', function() {
it('/mail-logs works', async function() {
server.create('category', { name: 'office' });
server.create('company', { name: 'selleo inc.' });
server.createList('mailLog', 10);
// LISTING
// ADD
expect(server.db.mailLogs[10].externalNumber).to.equal('200-212-123');
// EDIT
expect(server.db.mailLogs[1].externalNumber).to.equal('300-323-234');
});
});
describe('Acceptance | mail logs', function() {
it('/mail-logs works', async function() {
await page.visit();
// LISTING
// ADD
await page.formNew()
.fillExternalNumber('200-212-123')
.selectCompany('selleo')
.selectCategory('office')
.submit();
// EDIT
await page.onMailLog(1).click()
.formEdit()
.fillExternalNumber('300-323-234')
.submit();
});
});
ASYNC / AWAIT - ES2017
import page from 'cl-app/tests/pages/mail-logs';
describe('Acceptance | mail logs', function() {
it('/mail-logs works', async function() {
await page.visit();
// LISTING
// ADD
await page.formNew()
.fillExternalNumber('200-212-123')
.selectCompany('selleo')
.selectCategory('office')
.submit();
expect(page.mailLogCount).to.equal(11);
expect(page.onMailLog(10).text).to.include('200-212-123');
// EDIT
await page.onMailLog(1).click()
.formEdit()
.fillExternalNumber('300-323-234')
.submit();
expect(page.onMailLog(1).text).to.include('300-323-234');
});
});
PAGE OBJECT
import { before, after } from 'cl-app/tests/helpers/module-for-acceptance-authenticated';
describe('Acceptance | mail logs', function() {
beforeEach(before);
afterEach(after);
it('/mail-logs works', async function() {
// LISTING
// ADD
// EDIT
});
});
MOCK AUTH
describe('Acceptance | mail logs', function() {
this.timeout(7000);
it('/mail-logs works', async function() {
// LISTING
// ADD
// EDIT
});
});
TEST DEBUGGING
import { describe, it, beforeEach, afterEach } from 'mocha';
import { expect } from 'chai';
import { before, after } from 'cl-app/tests/helpers/module-for-acceptance-authenticated';
import page from 'cl-app/tests/pages/mail-logs';
describe('Acceptance | mail logs', function() {
this.timeout(7000);
beforeEach(before);
afterEach(after);
it('/mail-logs works', async function() {
server.create('category', { name: 'office' });
server.create('company', { name: 'selleo inc.' });
server.createList('mailLog', 10);
await page.visit();
// LISTING
expect(currentURL()).to.equal('/mail-logs');
expect(page.mailLogCount).to.equal(10);
// ADD
await page.formNew()
.fillExternalNumber('200-212-123')
.selectCompany('selleo')
.selectCategory('office')
.submit();
expect(page.mailLogCount).to.equal(11);
expect(page.onMailLog(10).text).to.include('200-212-123');
expect(server.db.mailLogs[10].externalNumber).to.equal('200-212-123');
// EDIT
await page.onMailLog(1).click()
.formEdit()
.fillExternalNumber('300-323-234')
.submit();
expect(page.onMailLog(1).text).to.include('300-323-234');
expect(server.db.mailLogs[1].externalNumber).to.equal('300-323-234');
});
});
-
ember-cli-mirage
-
async / await
-
ember-cli-page-object
-
test helpers from addons
(e.g. from ember-simple-auth) -
pauseTest()
-
use firefox (over phantomjs)
ACCEPTANCE TESTING
-
smoke tests
? -
test-recorder
https://github.com/QuantumInformation/test-recorder -
ember-test-selectors
ACCEPTANCE TESTING
Mirage
Mock
Test Helpers
ember-simple-auth
Page
Object
ES2017
Michał Czyż
m.czyz@selleo.com
Acceptance Testing in Ember.js
By Michał Czyż
Acceptance Testing in Ember.js
emberjs meetup berlin July 2017
- 1,827