confident refactoring - ember sf meetup

23
Confident Refactoring Confident Refactoring Jade Applegate

Upload: fastly

Post on 13-Apr-2017

386 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Confident Refactoring

Jade Applegate

Page 2: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Tests

Page 3: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Page 4: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Tests

Page 5: Confident Refactoring - Ember SF Meetup

Confident Refactoring

- Ember QUnit- Ember CLI Mirage- PhantomJS- Custom test helpers

What we use

Page 6: Confident Refactoring - Ember SF Meetup

Confident Refactoring

// tests/helpers/find.js

import Ember from 'ember';

function findButton(app, text) { return find(app, 'input[type="submit"],input[type="button"],button,a.button').filter(`:contains(${text})`);}

const customHelpers = (function() { Test.registerHelper('findIcon', findIcon);})();

Page 7: Confident Refactoring - Ember SF Meetup

Confident Refactoring

// tests/helpers/find.js

import Ember from 'ember';

function findOrFalse(app, text) { const results = find(text); return results.length > 0 ? results : false;}

function findInlineValidation(app, text = 'Required') { return findOrFalse(app, `.help-inline:contains(${text})`);}

Page 8: Confident Refactoring - Ember SF Meetup

Confident Refactoring

//tests/acceptance/sign-in-test.js

test('fail to enter credentials', function(assert) { notSignedIn(); visit('/authentication/sign-in');

andThen(function() { click(findButton('Login')); });

andThen(function() { expectElement(findInlineValidation('Please enter your email address')); });});

Page 9: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Page 10: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Refactoring

Page 11: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Page 12: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Page 13: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Page 14: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Page 15: Confident Refactoring - Ember SF Meetup

Confident Refactoring

An Example

Page 16: Confident Refactoring - Ember SF Meetup

Confident Refactoring

// app/services/version-requests.js

createNewDomain(payload, serviceVersion) {return this._serviceVersionRequest('POST', serviceVersion, "domain", null, payload);

},

createHost(payload, serviceVersion) {return this._serviceVersionRequest('POST', serviceVersion, 'backend', null, payload);

},

createHeader(payload, serviceVersion) {return this._serviceVersionRequest("POST", serviceVersion, "header", null, payload);

}

Page 17: Confident Refactoring - Ember SF Meetup

Confident Refactoring

// app/services/version-requests.js continued...

editDomain(payload, serviceVersion, id) {return this._serviceVersionRequest('PUT', serviceVersion, "domain", id, payload);

},

editHost(payload, serviceVersion, id) {return this._serviceVersionRequest('PUT', serviceVersion, "backend", id, payload);

},

editDefaultSettings(payload, serviceVersion) {return this._serviceVersionRequest("PUT", serviceVersion, "settings", null, payload);

},

Page 18: Confident Refactoring - Ember SF Meetup

Confident Refactoring

// app/services/version-requests.js continued...

deleteDomain(id, serviceVersion) {return this._serviceVersionRequest('DELETE', serviceVersion, "domain", id);

},

deleteHost(id, serviceVersion) {return this._serviceVersionRequest('DELETE', serviceVersion, "backend", id);

},

deleteHeader(id, serviceVersion) {return this._serviceVersionRequest('DELETE', serviceVersion, "header", id);

}

Page 19: Confident Refactoring - Ember SF Meetup

Confident Refactoring

// app/services/version-requests.js

createResource(type, payload, serviceVersion) {return this._serviceVersionRequest('POST', serviceVersion, type, null, payload);

},

deleteResource(type, id, serviceVersion) {return this._serviceVersionRequest('DELETE', serviceVersion, type, id);

},

editResource(type, payload, serviceVersion, id) {return this._serviceVersionRequest('PUT', serviceVersion, type, id, payload);

}

Page 20: Confident Refactoring - Ember SF Meetup

Confident Refactoring

// tests/acceptance/manage-hosts.js

test('can delete a host', function(assert) { visit('/hosts/my-host'); andThen(() => { expectElement(findResource('.host', 'My Host')); click(findLink('Delete')); });

visit('/hosts'); andThen(() => { expectNoElement(findResource('.host', 'My Host')); });});

Page 21: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Page 22: Confident Refactoring - Ember SF Meetup

Confident Refactoring

- Rely on tests to guide refactoring- Write test helpers, but don’t overdo it! - Refactoring best practices:

1. Code smells2. Adding new features3. Three times rule4. Upgrading your application

Recap

Page 23: Confident Refactoring - Ember SF Meetup

Confident Refactoring

Thank you! Questions?