Ember.js 组件集成测试依赖于另一个不工作的第三方组件

Ember.js 组件集成测试依赖于另一个不工作的第三方组件,ember.js,ember-cli,Ember.js,Ember Cli,我在运行集成组件测试时遇到以下错误。你知道为什么吗?唯一有点奇怪的是{{input mask}}组件是从一个 TypeError:(中间值)。on不是函数 在 在mod.state() 在tryFinally() 按要求删除模块() 按要求 在具体化() 在mod.state() 在tryFinally() 按要求删除模块() 在Ember.DefaultResolver.extend.\u extractDefaultExport() 测试: 组成部分: import Ember from '

我在运行集成组件测试时遇到以下错误。你知道为什么吗?唯一有点奇怪的是
{{input mask}}
组件是从一个

TypeError:(中间值)。on不是函数 在 在mod.state() 在tryFinally() 按要求删除模块() 按要求 在具体化() 在mod.state() 在tryFinally() 按要求删除模块() 在Ember.DefaultResolver.extend.\u extractDefaultExport()

测试:

组成部分:

import Ember from 'ember';
import layout from './template';
import { startsWith } from '../../utils/elm-helpers';

const  { Component, observer } = Ember;

export default Component.extend({
  layout,

  // public
  value: null,
  format: '(99) 9999 9999',
  iconName: 'phone',
  disabled: false,

  valueUpdated: observer('value', function() {
    if (startsWith(this.get('value'), '04')) {
      this.set('format', '9999 999 999');
      this.set('iconName', 'mobile');
    } else {
      this.set('format', '(99) 9999 9999');
      this.set('iconName', 'phone');
    }
  })

});
模板:

<div class="input-group">
  <span class="input-group-addon">
      <i class="fa fa-{{iconName}}"></i>
  </span>

  {{input-mask mask=format name=name class="form-control" unmaskedValue=value disabled=disabled}}

</div>

{{input mask mask=format name=name class=“form control”unmaskedValue=value disabled=disabled}}

我不知道测试失败的原因,但这里有一些重构组件的建议

import Ember from 'ember';
import layout from './template';

const  {
  Component,
  computed,
  get
} = Ember;

export default Component.extend({
  layout,

  // public
  disabled: false,
  value: null,

  // I'm guessing at what the `startsWith` helper does. Even if
  // `computed.match` doesn't do the correct thing, I'd keep the
  // `valueStartsWithFour` computed property and wrap whatever
  // logic you need in it.
  valueStartsWithFour: computed.match('value', /^04/),

  format: computed('valueStartsWithFour', function() {
    const valueStartsWithFour = get(this, 'valueStartsWithFour');

    return valueStartsWithFour ? '9999 999 999' : '(99) 9999 9999';
  }),

  iconName: computed('valueStartsWithFour', function() {
    const valueStartsWithFour = get(this, 'valueStartsWithFour');

    return valueStartsWithFour ? 'mobile' : 'phone';
  })
});
作为一般的经验法则,最好在可能的情况下使用计算属性。发件人:

观察员在Ember框架本身中大量使用,但是 Ember应用程序开发人员面临的大多数问题,计算属性是 适当的解决办法


同意,您的组件要好得多。将能够在周二试用此功能。为什么要使用
Ember.get(this'valueStartsWithFour')
而不是
this.get('valueStartsWithFour')
。这是有原因的还是仅仅是个人偏好?简单回答:一致性和
Ember.get()
同时适用于POJO和Ember对象。更多信息:好的,我喜欢它也适用于普通对象。
import Ember from 'ember';
import layout from './template';

const  {
  Component,
  computed,
  get
} = Ember;

export default Component.extend({
  layout,

  // public
  disabled: false,
  value: null,

  // I'm guessing at what the `startsWith` helper does. Even if
  // `computed.match` doesn't do the correct thing, I'd keep the
  // `valueStartsWithFour` computed property and wrap whatever
  // logic you need in it.
  valueStartsWithFour: computed.match('value', /^04/),

  format: computed('valueStartsWithFour', function() {
    const valueStartsWithFour = get(this, 'valueStartsWithFour');

    return valueStartsWithFour ? '9999 999 999' : '(99) 9999 9999';
  }),

  iconName: computed('valueStartsWithFour', function() {
    const valueStartsWithFour = get(this, 'valueStartsWithFour');

    return valueStartsWithFour ? 'mobile' : 'phone';
  })
});