如何检查绑定是否在 ExtJS 6 中有效? (测试)
How to check whether the binding worked in ExtJS 6? (testing)
我想在 ExtJS 6.7 应用程序上自动执行一些与数据绑定相关的测试。
我可以在 "full application" 中看到绑定工作完美(显然在测试中也可以从屏幕截图中看到),但是我为了自动化测试我不知道我可以听哪些事件。
绑定过程显然是异步的,我需要 "wait" 在检查值之前完成它,但我在 Sencha 文档中找不到任何内容。
实际上我需要一个挂钩到我可以 "assume" 绑定已经完成的某个状态,因为出于测试目的我还想涵盖绑定未完成的情况(即错字在字段名称中,更改绑定 json 结构等)。
请查看屏幕截图下方的代码并提前致谢!
viewController.js:
Ext.define('Pms.view.test.viewController',
{
extend: 'Ext.app.ViewController',
xtype: 'controller.controller'
});
viewModel.js:
Ext.define('Pms.view.test.viewModel',
{
extend: 'Ext.app.ViewModel',
data: {
windowTitle: 'Title bound!'
}
});
form.js:
Ext.define('Pms.view.test.form',
{
extend: 'Ext.window.Window',
requires: ['Pms.view.test.viewController','Pms.view.test.viewModel'],
controller: 'controller',
viewModel: { type: 'Pms.view.test.viewModel' },
bind: {
title: '{windowTitle}'
}
});
form.spec.js:
Ext.Loader.syncRequire([
'Pms.view.test.form',
'Pms.view.test.viewModel'
]);
describe('Pms.view.test.form', function() {
it('Bound',
function() {
var w = Ext.create('Pms.view.test.form');
w.setViewModel(Ext.create('Pms.view.test.viewModel'));
w.show();
// the following line is expected to be run in the asynchronous hook I'm looking for
expect(w.title).to.be('Title bound!');
});
});
简短的回答是:
vm.notify();
详细答案是:
it('Bound',
function() {
let form = Ext.create('Pms.view.test.Form'),
vm = form.getViewModel();
// form.show(); ==> replaced by autoShow: true
vm.notify();
expect(form.getTitle()).to.be('Title bound!');
}
);
奖金信息:
您的代码可以改进:
- 始终使用大写字母作为文件名(例如
Form.js
==> Pms.view.test.Form
)
- 您可以使用
autoShow
配置 而不是 form.show()
- 对视图使用相同的
alias
,viewController 和 viewModel(此处:test-form
)
- 将工作
controller
视为保留字,不要用作您的控制器的名称
- 命名你的 viewModel ==> 别名:
viewmodel.test-form
,
查看:
Ext.define('Pms.view.test.Form', {
extend: 'Ext.window.Window',
xtype: 'test-form',
requires: [
'Pms.view.test.FormController',
'Pms.view.test.FormModel'
],
controller: 'test-form',
viewModel: { type: 'test-form' },
autoShow: true,
bind: {title: '{windowTitle}'}
});
控制器:
Ext.define('Pms.view.test.FormController', {
extend: 'Ext.app.ViewController',
alias : 'controller.test-form'
});
视图模型:
Ext.define('Pms.view.test.FormModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewModel.test-form',
data: {
windowTitle: 'Title bound!'
}
});
我想在 ExtJS 6.7 应用程序上自动执行一些与数据绑定相关的测试。 我可以在 "full application" 中看到绑定工作完美(显然在测试中也可以从屏幕截图中看到),但是我为了自动化测试我不知道我可以听哪些事件。
绑定过程显然是异步的,我需要 "wait" 在检查值之前完成它,但我在 Sencha 文档中找不到任何内容。
实际上我需要一个挂钩到我可以 "assume" 绑定已经完成的某个状态,因为出于测试目的我还想涵盖绑定未完成的情况(即错字在字段名称中,更改绑定 json 结构等)。
请查看屏幕截图下方的代码并提前致谢!
viewController.js:
Ext.define('Pms.view.test.viewController',
{
extend: 'Ext.app.ViewController',
xtype: 'controller.controller'
});
viewModel.js:
Ext.define('Pms.view.test.viewModel',
{
extend: 'Ext.app.ViewModel',
data: {
windowTitle: 'Title bound!'
}
});
form.js:
Ext.define('Pms.view.test.form',
{
extend: 'Ext.window.Window',
requires: ['Pms.view.test.viewController','Pms.view.test.viewModel'],
controller: 'controller',
viewModel: { type: 'Pms.view.test.viewModel' },
bind: {
title: '{windowTitle}'
}
});
form.spec.js:
Ext.Loader.syncRequire([
'Pms.view.test.form',
'Pms.view.test.viewModel'
]);
describe('Pms.view.test.form', function() {
it('Bound',
function() {
var w = Ext.create('Pms.view.test.form');
w.setViewModel(Ext.create('Pms.view.test.viewModel'));
w.show();
// the following line is expected to be run in the asynchronous hook I'm looking for
expect(w.title).to.be('Title bound!');
});
});
简短的回答是:
vm.notify();
详细答案是:
it('Bound',
function() {
let form = Ext.create('Pms.view.test.Form'),
vm = form.getViewModel();
// form.show(); ==> replaced by autoShow: true
vm.notify();
expect(form.getTitle()).to.be('Title bound!');
}
);
奖金信息: 您的代码可以改进:
- 始终使用大写字母作为文件名(例如
Form.js
==>Pms.view.test.Form
) - 您可以使用
autoShow
配置 而不是 - 对视图使用相同的
alias
,viewController 和 viewModel(此处:test-form
) - 将工作
controller
视为保留字,不要用作您的控制器的名称 - 命名你的 viewModel ==> 别名:
viewmodel.test-form
,
form.show()
查看:
Ext.define('Pms.view.test.Form', {
extend: 'Ext.window.Window',
xtype: 'test-form',
requires: [
'Pms.view.test.FormController',
'Pms.view.test.FormModel'
],
controller: 'test-form',
viewModel: { type: 'test-form' },
autoShow: true,
bind: {title: '{windowTitle}'}
});
控制器:
Ext.define('Pms.view.test.FormController', {
extend: 'Ext.app.ViewController',
alias : 'controller.test-form'
});
视图模型:
Ext.define('Pms.view.test.FormModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewModel.test-form',
data: {
windowTitle: 'Title bound!'
}
});