Javascript 如何用Siesta覆盖testClass方法?

Javascript 如何用Siesta覆盖testClass方法?,javascript,class,extjs,ui-testing,siesta,Javascript,Class,Extjs,Ui Testing,Siesta,我正在使用Bryntum Siesta对ExtJS应用程序进行UI测试。我创建了一个TestClass,目的是为不同的视图使用它的方法。整个测试操作都是相同的,只是一些特定的东西在改变,例如包,视图,网格名称。以下是测试套件中的一些片段: 主要测试类别 var isDisplaying = 'Grid is displaying now.'; var collapseDesc = 'Collapse Navbar'; Class('Siesta.Test.ListScreen', {

我正在使用Bryntum Siesta对ExtJS应用程序进行UI测试。我创建了一个
TestClass
,目的是为不同的视图使用它的方法。整个测试操作都是相同的,只是一些特定的东西在改变,例如
视图
网格
名称。以下是测试套件中的一些片段:

主要测试类别

var isDisplaying =  'Grid is displaying now.';
var collapseDesc = 'Collapse Navbar';

Class('Siesta.Test.ListScreen', {

    isa     : Siesta.Test.ExtJS,

    methods: {
        navigation: function (callback) {
            var t = this;

            t.chain(
                {waitForCQ: 'treelist[itemId=navigationTreeList]'},

                function (next) {
                    t.click('treelist[itemId=navigationTreeList]');
                    next();

                },
                {click: '>> treelistitem[_text=Package_Name]'},
                {click: '>> treelistitem[_text=Package_Submodule]', desc: 'Package Submodule'+isDisplaying},
                {click: '#main-navigation-btn => .fa-navicon', desc: collapseDesc},

                function (next) {
                    console.log('navigation func log');
                    next();
                },

                callback
           )
       }
   }
});
此testClass从
包\u子模块调用并获得成功:

describe('UI Testing: Submodule List Screen', function (t) {

    //Extended method for navigation to submodule
    t.it('Should open: Submodule Grid', function (t) {
        t.chain(
            {
                navigation: t.next
            }
        )
    });
});
这里的问题是,我想为另一个子模块调用相同的
TestClass
方法,并覆盖一些内容,例如
Package\u Name
Package\u子模块
。我怎样才能成功地做到这一点

提前谢谢


通过JackSamura的回答更新

亲爱的@SamuraiJack我已经重构了主类(ListScreen)并插入了
has
属性。还使用
config
属性修改了
线束
,但不幸的是,它没有覆盖
myPackageName
mySubModule
。而不是我得到了这个错误:

Waiting for element ">> treelistitem[_text=packageName]" to appear  
我也尝试过使用函数参数,但效果不太好。你能告诉我为什么不能覆盖新值吗

主类(更新):

index.js

group: 'UI Tests',
    items: [
        {
            group: 'Submodule List Screen',
            testClass: Siesta.Test.ListScreen,
            items: [
                {
                    title           : 'Submodule1',
                    hostPageUrl     : localApp,
                    url             : '02-ui-tests/02_01-submodule-list-screen/submodule1-list.t.js',
                    config      : {
                        myPackageName     : 'Package1',
                        mySubModule       : 'Submodule1'
                    }
                },

您可以通过两种方式完成:

1) 向“导航”方法添加参数:

也许不言自明

2) 更复杂一点-向自定义测试类添加新属性:

Class('Siesta.Test.ListScreen', {

    isa     : Siesta.Test.ExtJS,

    has : {
        // values goes into prototype, like in Ext
        myPackageName : 'packageName',
        mySubModule   : 'subModule'
    },

    methods: {
然后您可以像往常一样在“导航”方法中引用这些属性:
this.myPackageName

然后,要覆盖,您可以创建一个新的测试类(子类化
Siesta.test.ListScreen
)并重新定义其中的属性,或者使用测试描述符的config属性:

harness.start(
    {
        url         : 'mytest.t.js',
        config      : {
            myPackageName     : 'value1',
            mySubModule       : 'value2'
        }
    },
    ...
)
提示:要更快获得答案,请将其发布到午睡论坛:

更新:

您得到的错误可能是因为“导航”方法是从子测试启动的(每个“t.it()”或“t.descripe()”节都会创建一个单独的“子测试”)。这些子测试不会应用配置-它只应用于顶级测试。一种解决方案是复制属性值:

    // in the "methods" of the custom test class
    processSubTestConfig : function (config) {
        var cfg = this.SUPER(config)

        cfg.myPackage = this.myPackage
        ...

        return cfg
    },

但这已经是高级午睡编码了。也许只使用函数参数会更简单。

亲爱的@SamuraiJack谢谢你的建议。我一直在实施这两个方面,并了解流程。顺便说一句,不幸的是,我没有资金访问Bryntum论坛,因为它是付费的。现在我正在使用免费的Lite版本的午睡来发展我的个人发展。我已经更新了你的建议的基于问题的实现,但是有几个错误。你能看一下更新的部分吗。非常感谢。Bryntum论坛是免费的,请尝试注册。Siesta Lite用户也很受欢迎。“Bryntum论坛是免费的”几乎是我今天得到的最好答案:)到目前为止,我一直试图通过菜单栏的登录按钮登录,该按钮占据客户区域。刚才注意到在董事会索引的底部有注册链接:))欢迎加入:)
harness.start(
    {
        url         : 'mytest.t.js',
        config      : {
            myPackageName     : 'value1',
            mySubModule       : 'value2'
        }
    },
    ...
)
    // in the "methods" of the custom test class
    processSubTestConfig : function (config) {
        var cfg = this.SUPER(config)

        cfg.myPackage = this.myPackage
        ...

        return cfg
    },