如何检查绑定是否在ExtJS 6中起作用? (正在测试)

问题描述 投票:0回答:1

我想自动化一些与ExtJS 6.7应用程序上的数据绑定相关的测试。我可以在“完整应用程序”中看到绑定可以很好地工作(显然,在测试中也可以从屏幕快照中看到),但是我无法自动执行测试,因此我不知道可以听哪些事件。

绑定过程显然是异步的,在检查值之前,我需要“等待”它完成,但是我无法在Sencha文档中找到任何内容。

实际上,我需要挂钩到可以“假设”绑定完成的某种状态,因为出于测试目的,我还想介绍绑定未完成的情况(例如,字段名称中的错字,更改绑定的json结构等)。

请参见屏幕截图下方的代码,并提前致谢!

Test result

UI output

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!');
        });
});
extjs mocha extjs6 extjs6-classic karma-mocha
1个回答
0
投票

简短的答案是: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
  • 代替使用form.show(),您可以使用autoShow配置
  • 对视图,viewController和viewModel使用相同的alias(在这里: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'
});

viewModel:

Ext.define('Pms.view.test.FormModel', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewModel.test-form',

    data: {
        windowTitle: 'Title bound!'
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.