为什么我的余烬测试给我类型错误:“未定义”不是一个函数

Why do my ember tests give me TypeError: 'undefined' is not a function?

本文关键字:未定义 函数 一个 测试 余烬 我的 错误 类型 为什么      更新时间:2023-09-26

这是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

您实际上得到了一个有用的堆栈跟踪,尽管在编译的vendor.js中而不是在源文件中。

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

令人讨厌的是,Testem没有指向源文件,但是您应该能够从编译的文件返回相同的方式。

(此外,看起来堆栈跟踪的第一行来自jQuery,如果有帮助的话。