Ember.js 组件单元测试单独通过,但在整个测试套件中失败
我已经创建了一个利用剑道UI的日期选择器组件。我想写一个单元测试,它断言当输入字段被聚焦时,日期选择器被打开。不幸的是,我编写的测试在隔离运行时通过,但在与其他测试一起运行时失败。以下是我的组件:Ember.js 组件单元测试单独通过,但在整个测试套件中失败,ember.js,kendo-ui,ember-cli,Ember.js,Kendo Ui,Ember Cli,我已经创建了一个利用剑道UI的日期选择器组件。我想写一个单元测试,它断言当输入字段被聚焦时,日期选择器被打开。不幸的是,我编写的测试在隔离运行时通过,但在与其他测试一起运行时失败。以下是我的组件: //components/date-input.js import Ember from 'ember'; export default Ember.TextField.extend({ _datePicker: null, setupDatePicker: function() {
//components/date-input.js
import Ember from 'ember';
export default Ember.TextField.extend({
_datePicker: null,
setupDatePicker: function() {
var datePicker = this.$().kendoDatePicker();
this.set('_datePicker', datePicker.data('kendoDatePicker'));
}.on('didInsertElement'),
destroyDatePicker: function() {
var datePicker = this.get('_datePicker');
if (datePicker) {
datePicker.destroy();
}
this.set('_datePicker', null);
}.on('willDestroyElement'),
openDatePicker: function() {
this.get('_datePicker').open();
}.on('focusIn')
});
以及我的单元测试:
//tests/unit/components/date-input-test.js
import {
moduleForComponent,
test
} from 'ember-qunit';
moduleForComponent('date-input', 'DateInputComponent');
test('it opens the date picker when focused', function() {
expect(2);
this.append();
equal($('.k-calendar-container').css('display'), 'none',
'calendar is hidden by default');
this.subject().$().focus();
/**** This assertion fails. ****/
equal($('.k-calendar-container').css('display'), 'block',
'calendar is displayed after focus');
});
当使用以下完整测试套件运行时,最终断言失败:
DateInputComponent: it opens the date picker when focused
✘ calendar is displayed after focus
expected block
actual none
这是否有任何原因可以单独通过,但在与测试套件的其余部分一起运行时失败?我使用的是Ember CLI 0.1.12,它使用的是Ember 1.8.1
编辑:我已经将演示此问题的完整源代码推到了前面。我的第一个调试想法:1)
equal($('.k-calendar-container').length的输出是多少代码>2)当您交换断言时会发生什么1)有趣的是,$(“.k-calendar-container”).length
在测试单独运行时是1
,在两个测试同时运行时是2
。这就好像日历在测试运行后没有被破坏一样。有没有办法解决这个问题?2) 交换断言会导致测试在隔离状态下以及在与套件的其余部分一起运行时失败。它很可能没有连接到测试容器,并且我不确定测试运行者对WillDestroyment元素的耐心有多大。