为什么我的余烬测试给了我TypeError:' undefined'不是函数吗?

时间:2016-03-04 11:28:52

标签: javascript testing ember.js qunit

这是来自ember test --serv输出的错误:

Integration | Component | date-time-input: it renders
    ✘ TypeError: 'undefined' is not a function (evaluating 'elem.getAttribute( name )')
        http://localhost:7357/assets/vendor.js:1685

我的所有集成和验收测试都会发生这种情况。

如果没有合适的堆栈跟踪,如何调试此错误? 有没有办法配置ember给我一个不错的堆栈跟踪?

以下是对上述错误的测试:

import { moduleForComponent, test } from 'ember-qunit';
import Ember from 'ember';
import hbs from 'htmlbars-inline-precompile';

moduleForComponent('date-time-input',
  'Integration | Component | date-time-input', {
    integration: true,
  });

test('it renders', function(assert) {
  // Set any properties with this.set('myProperty', 'value');
  // Handle any actions with this.on('myAction', function(val) { ... });
  let two = Ember.Object.extend({
    someDate: null,
  });
  this.set('two', two);
  this.render(hbs`{{date-time-input model=two field='someDate'}}`);

  assert.notEqual(this.$().text().indexOf('2016'), -1);
});

和相应的组件

import Ember from 'ember';

export default Ember.Component.extend({

  fieldValue: Ember.computed('model', 'field', function () {
    let fieldName = this.get('field');
    let value = this.get('model.' + fieldName);
    return value;
  }).readOnly(),

  actions: {
    dateChanged: function (value) {
      let model = this.get('model');
      let field = this.get('field');

      model.set(field, value);
    },
  },
});

{{flat-pickr
  dateFormat='F j, Y at'
  timeFormat='h:i K'
  value=fieldValue
  enableTime=true
  onChange=(action 'dateChanged')
}}

这是我的回购,万一有人好奇:https://github.com/NullVoxPopuli/aeonvera-ui

1 个答案:

答案 0 :(得分:4)

您实际上已经获得了有用的堆栈跟踪,但是在编译的vendor.js而不是源文件中。

如果您正在使用Chrome,请在来源面板中打开assets/vendor.js。然后在第1685行设置一个断点。由于ember-cli在资产编译时创建源地图,Chrome应立即将您带到源文件中的相应行。

令人讨厌的是,Testem并没有指向源文件,但是您应该能够从已编译的文件中恢复原状。

(另外,看起来堆栈跟踪的顶行来自jQuery,如果有帮助的话。)