2015-03-09 1 views
0

Есть ли ограничения с использованием применения (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply) в тестах qunit?TypeError: Не удается прочитать свойство «apply» из неопределенного, используя javascript, применяемый в тестах?

import { 
    moduleForModel, 
    test 
} from 'ember-qunit'; 

moduleForModel('enterprise', 'Enterprise Model', {}); 

test('salesTaxPercent gets converted from human readable decimal to float properly using convertPercentage helper method', function(assert) { 
    var store = this.store(); 
    var model = this.subject({salesTaxPercent: 2.50}); 
    assert.equal(model.get('salesTax'), 0.025, 'salesTax computed property is 0.025'); 
}); 

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    salesTax: DS.attr('number', {defaultValue: 0}), 
    salesTaxPercent: function(key, value, previousValue) { 
     return this.convertPercentage.apply(this, arguments); 
    }.property('salesTax') 
}); 

DS.Model.reopen({ 
convertPercentage: function(key, value, previousValue) { 
     var percentKey = arguments[0].replace('Percent',''); 
     if(arguments.length > 1) { 
      this.set(percentKey, accounting.unformat((arguments[1]/100))); 

     return Ember.isEmpty(this.get(percentKey)) ? null : accounting.unformat((this.get(percentKey) * 100).toFixed(2)); 
} 
}); 

Также StackTrace выглядит следующим образом:

TypeError: Cannot read property 'apply' of undefined 
    at null.<anonymous> (http://localhost:4200/provider/assets/inbox-dashboard.js:7099:42) 
    at Descriptor.computedPropertySet [as _set] (http://localhost:4200/provider/assets/vendor.js:27308:20) 
    at Descriptor.computedPropertySetWithSuspend [as set] (http://localhost:4200/provider/assets/vendor.js:27270:14) 
    at set (http://localhost:4200/provider/assets/vendor.js:32804:14) 
    at http://localhost:4200/provider/assets/vendor.js:33575:11 
    at tryFinally (http://localhost:4200/provider/assets/vendor.js:34504:28) 
    at changeProperties (http://localhost:4200/provider/assets/vendor.js:32529:7) 
    at setProperties (http://localhost:4200/provider/assets/vendor.js:33568:7) 
    at __exports__.default.Mixin.create.setProperties (http://localhost:4200/provider/assets/vendor.js:48068:16) 
    at Ember.Object.extend.createRecord (http://localhost:4200/provider/assets/vendor.js:119923:16)TypeError: Cannot read property 'apply' of undefined 
    at null.<anonymous> (http://localhost:4200/provider/assets/inbox-dashboard.js:7099:42) 
    at Descriptor.computedPropertySet [as _set] (http://localhost:4200/provider/assets/vendor.js:27308:20) 
    at Descriptor.computedPropertySetWithSuspend [as set] (http://localhost:4200/provider/assets/vendor.js:27270:14) 
    at set (http://localhost:4200/provider/assets/vendor.js:32804:14) 
    at http://localhost:4200/provider/assets/vendor.js:33575:11 
    at tryFinally (http://localhost:4200/provider/assets/vendor.js:34504:28) 
    at changeProperties (http://localhost:4200/provider/assets/vendor.js:32529:7) 
    at setProperties (http://localhost:4200/provider/assets/vendor.js:33568:7) 
    at __exports__.default.Mixin.create.setProperties (http://localhost:4200/provider/assets/vendor.js:48068:16) 
    at Ember.Object.extend.createRecord (http://localhost:4200/provider/assets/vendor.js:119923:16) 
+1

Что такое 'convertPercentage'? Он не определен в коде, который вы опубликовали, и, следовательно, приведет к точной ошибке, о которой вы сообщаете. –

+0

мой плохой, его в модели снова открыть, разместил код выше, этот код выше отлично работает в прямом приложении, это тест, где он сбой – flylib

ответ

0

Инициализаторы не работают в блок тестирует componentForModel, поэтому this.convertPercentage не определен (как предполагает ошибка).

Поэтому мое предложение заключается импортировать функции из модели и просто прикрепить его:

import convertPercentage from "../utils/convert-percentage"; 

export default DS.Model.extend({ 
    salesTaxPercent: function(key, value, previousValue) { 
    return this.convertPercentage.apply(this, arguments); 
    }.property('salesTax') 
}); 

https://github.com/rwjblue/ember-qunit/issues/149#event-261578363

Смежные вопросы