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