类型错误:无法读取未定义的属性“apply”,在测试中使用 javascript apply



在qunit测试中使用apply(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)是否有限制?

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));
 }
});

堆栈跟踪也如下所示:

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)

初始值设定项不在单元测试组件ForModel中运行,因此this.convertPercent是未定义的(如错误所示)。

所以我的建议是从您的模型中导入函数并附加它:

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

相关内容

  • 没有找到相关文章

最新更新