ember.js - Acceptance tests aren't resetting -


i have acceptance tests test component. if run each test separately, pass fine. however, when run tests together, fail because they're retaining values previous tests.

here code:

filter-test.js

module('integration - filter', {   beforeeach: function() {     app = startapp();     server = setuppretender();     authenticatesession();   },   aftereach: function() {     ember.run(app, 'destroy');     server.shutdown();   } });  test('filters can saved , selected via dropdown', function(assert) {   visit('/status');   fillin('.filter-status', 'not completed');   fillin('.filter-id', '444');    andthen(function() {     assert.ok(find('.status-title').text().includes('2 of 7'), 'the new filter filters results');   }); });  test('only saved filters can edited', function(assert) {   visit('/status');   fillin('.filter-id', 'not id');   click('.update-filter');    andthen(function() {     assert.equal(find('.alert').text(), 'not saved filter×');   }); });  test('filter values can cleared', function(assert) {   visit('/status');   fillin('.filter-id', '444');   fillin('.filter-status', 'completed');   click('.clear-filters');    andthen(function() {     // fails because `.filter-id` set 'not id':     assert.equal(find('.filter-id').val(), '', 'filter reset initial value');     // fails because `.filter-status` set 'not completed':     assert.equal(find('.filter-status').val(), 'everything', 'status dropdown reset initial value');   }); }); 

ps-filter/component.js

export default ember.component.extend({   classnames: ['panel', 'panel-default', 'filter-panel'],   currentfilter: null,   initialvalues: null,    didinsertelement: function() {     this.set('initialvalues', ember.copy(this.get('filtervalues')));   },    actions: {     savefilter: function(name) {       var filters = this._getfilterlist();       var filtervalues = this.get('filtervalues');        if (!ember.isempty(name)) {         filters[name] = filtervalues;          this.sendaction('updatefilter', filters);         this.set('currentfilter', name);       }     },      updatefilter: function() {       var filtervalues = this.get('filtervalues');       var currentfilter = this.get('currentfilter')       var filters = this.get('userfilters');        filters[currentfilter] = filtervalues;        this.sendaction('updatefilter', filters);     },      clearfilters: function() {       this.set('currentfilter', null);       this.set('filtervalues', ember.copy(this.get('initialvalues')));     }   } }); 

status/controller.js

export default ember.arraycontroller.extend({   filtervalues: {     filterstatus: 'everything',     filterid: 'id',   },   userfilters: ember.computed.alias('currentuser.content.preferences.filters') }); 

status/template.hbs

<div class="row">   {{ps-filter     filtervalues=filtervalues     userfilters=userfilters     updatefilter='updatefilter'   }} </div> 

from gathered, seems sets initialvalues filtervalues left on previous test. however, thought aftereach supposed reset original state. there reason why doesn't reset values in controller?

note component works when run in development.

ember versions listed in ember inspector:

ember      : 1.11.3 ember data : 1.0.0-beta.18 

i'm running ember cli 0.2.7.

edit

i don't think issue @ all, here pretender setup:

tests/helpers/setup-pretender.js

export default function setuppretender(attrs) {   var users = [     {       id: 1,       name: 'ttest',       preferences: null     }   ];    var activities = [     {       id: 36874,       activity_identifier: '18291',       status: 'complete'     }, {       id: 36873,       activity_identifier: '82012',       status: 'in progress'     }, {       id: 35847,       activity_identifier: '189190',       status: 'in progress'     }, {       id: 35858,       activity_identifier: '189076',       status: 'not started'     }, {       id: 382901,       activity_identifier: '182730',       status: 'not started'     }, {       id: 400293,       activity_identifier: '88392',       status: 'complete'     }, {       id: 400402,       activity_identifier: '88547',       status: 'complete'     }   ];    return new pretender(function() {     this.get('api/v1/users/:id', function(request) {       var user = users.find(function(user) {         if (user.id === parseint(request.params.id, 10)) {           return user;         }       });        return [200, {"content-type": "application/json"}, json.stringify({user: user})];     });      this.get('api/v1/activities', function(request) {       return [200, {"content-type": "application/json"}, json.stringify({         activities: activities       })];     });      this.put('api/v1/users/:id', function(request) {       var response = ember.$.parsejson(request.requestbody);       response.user.id = parseint(request.params.id, 10);        var olduser = users.find(function(user) {         if (user.id === parseint(request.params.id, 10)) {           return user;         }       });       var olduserindex = users.indexof(olduser);        if (olduserindex > -1) {         users.splice(olduserindex, 1);         users.push(response.user);       }        return [200, {"content-type": "application/json"}, json.stringify(response)];     });   }); } 

when run tests, fails because reset value 1 in previous test. example, when run 'filter values can cleared', .filter-id input has same .filter-id value 'only saved filter can edited. if change value in 'only saved filters can edited'back '', 'filter values can cleared' test passes.

basically, component sets initialvalues property when first inserts element. it's set copy of filtervalues property, should set controller's filtervalues property, , shouldn't change. however, seems modified filtervalues property carried on next test, means initialvalues set modified property when rerenders. so, test rerenders templates, retains modified values in controller , component.

i can make tests pass creating initialvalues property in controller , passing component, that'd mean having duplicate properties in controller (since filtervalues , initialvalues have same values).

i modify user record in component, thought we're supposed modify records in controller or router. besides, isn't aftereach hook supposed reset app?


Comments

Popular posts from this blog

searchKeyword not working in AngularJS filter -

sequelize.js - Sequelize: sort by enum cases -

user interface - how to replace an ongoing process of image capture from another process call over the same ImageLabel in python's GUI TKinter -