如何用 Siesta 覆盖 testClass 方法?
How to override testClass methods with Siesta?
我正在使用 Bryntum Siesta UI 测试 ExtJS 应用程序。我创建了一个 TestClass
并旨在将其方法用于不同的视图。测试的整个操作是相同的,只是一些特定的事情发生了变化,例如 package
、view
、grid
名称。以下是测试套件的一些片段:
主要测试Class
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
)
}
}
});
此测试Class 从 Package_Submodule
调用并获得成功:
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_Name
和 Package_Submodule
。我怎样才能成功做到这一点?
提前致谢
更新 通过 JackSamura 的回答:
亲爱的@SamuraiJack 我重构了 Main Class (ListScreen) 并插入了 has
属性。还用 config
属性 修改了 harness
但不幸的是它没有覆盖 myPackageName
或 mySubModule
。而不是我得到这个错误:
Waiting for element ">> treelistitem[_text=packageName]" to appear
我也尝试过使用函数参数,但它也不起作用。你能告诉我为什么我不能覆盖新值吗?
主要Class(更新):
var isDisplaying = 'Grid is displaying now.';
var collapseDesc = 'Collapse Navbar';
Class('Siesta.Test.ListScreen', {
isa : Siesta.Test.ExtJS,
has : {
myPackageName : 'packageName',
mySubModule : 'subModule'
},
methods: {
navigation: function (callback) {
var t = this;
t.chain(
{waitForCQ: 'treelist[itemId=navigationTreeList]'},
function (next) {
t.click('treelist[itemId=navigationTreeList]');
next();
},
{click: '>> treelistitem[_text='+this.myPackageName+']'},
{click: '>> treelistitem[_text='+this.mySubModule+']', desc: this.mySubModule+isDisplaying},
{click: '#main-navigation-btn => .fa-navicon', desc: collapseDesc},
function (next) {
console.log('navigation func log');
next();
},
callback
)
}
}
});
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) 向"navigation"方法添加参数:
// callback should be the last one
navigation: function (packageName, packageSubModule, callback) {
可能不言自明
2) 有点复杂 - 向您的自定义测试添加新属性 class:
Class('Siesta.Test.ListScreen', {
isa : Siesta.Test.ExtJS,
has : {
// values goes into prototype, like in Ext
myPackageName : 'packageName',
mySubModule : 'subModule'
},
methods: {
然后就可以照常在"navigation"方法中引用那些属性了:this.myPackageName
然后,要覆盖,您可以创建一个新测试 class(subclassing Siesta.Test.ListScreen
)并重新定义其中的属性,或者使用测试描述符的配置 属性:
harness.start(
{
url : 'mytest.t.js',
config : {
myPackageName : 'value1',
mySubModule : 'value2'
}
},
...
)
提示:要更快地获得答案 - post 到 Siesta 论坛:https://www.bryntum.com/forum/viewforum.php?f=20
更新:
你得到的错误可能是因为 "navigation" 方法是从子测试启动的(每个 "t.it()" 或 "t.describe()" 部分创建一个单独的 "subtest")。这些子测试不会应用配置 - 它仅应用于顶级测试。一种解决方案是复制属性值:
// in the "methods" of the custom test class
processSubTestConfig : function (config) {
var cfg = this.SUPER(config)
cfg.myPackage = this.myPackage
...
return cfg
},
但这已经是高级的 Siesta 内部编码了。可能只使用函数参数会更简单..
我正在使用 Bryntum Siesta UI 测试 ExtJS 应用程序。我创建了一个 TestClass
并旨在将其方法用于不同的视图。测试的整个操作是相同的,只是一些特定的事情发生了变化,例如 package
、view
、grid
名称。以下是测试套件的一些片段:
主要测试Class
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
)
}
}
});
此测试Class 从 Package_Submodule
调用并获得成功:
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_Name
和 Package_Submodule
。我怎样才能成功做到这一点?
提前致谢
更新 通过 JackSamura 的回答:
亲爱的@SamuraiJack 我重构了 Main Class (ListScreen) 并插入了 has
属性。还用 config
属性 修改了 harness
但不幸的是它没有覆盖 myPackageName
或 mySubModule
。而不是我得到这个错误:
Waiting for element ">> treelistitem[_text=packageName]" to appear
我也尝试过使用函数参数,但它也不起作用。你能告诉我为什么我不能覆盖新值吗?
主要Class(更新):
var isDisplaying = 'Grid is displaying now.';
var collapseDesc = 'Collapse Navbar';
Class('Siesta.Test.ListScreen', {
isa : Siesta.Test.ExtJS,
has : {
myPackageName : 'packageName',
mySubModule : 'subModule'
},
methods: {
navigation: function (callback) {
var t = this;
t.chain(
{waitForCQ: 'treelist[itemId=navigationTreeList]'},
function (next) {
t.click('treelist[itemId=navigationTreeList]');
next();
},
{click: '>> treelistitem[_text='+this.myPackageName+']'},
{click: '>> treelistitem[_text='+this.mySubModule+']', desc: this.mySubModule+isDisplaying},
{click: '#main-navigation-btn => .fa-navicon', desc: collapseDesc},
function (next) {
console.log('navigation func log');
next();
},
callback
)
}
}
});
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) 向"navigation"方法添加参数:
// callback should be the last one
navigation: function (packageName, packageSubModule, callback) {
可能不言自明
2) 有点复杂 - 向您的自定义测试添加新属性 class:
Class('Siesta.Test.ListScreen', {
isa : Siesta.Test.ExtJS,
has : {
// values goes into prototype, like in Ext
myPackageName : 'packageName',
mySubModule : 'subModule'
},
methods: {
然后就可以照常在"navigation"方法中引用那些属性了:this.myPackageName
然后,要覆盖,您可以创建一个新测试 class(subclassing Siesta.Test.ListScreen
)并重新定义其中的属性,或者使用测试描述符的配置 属性:
harness.start(
{
url : 'mytest.t.js',
config : {
myPackageName : 'value1',
mySubModule : 'value2'
}
},
...
)
提示:要更快地获得答案 - post 到 Siesta 论坛:https://www.bryntum.com/forum/viewforum.php?f=20
更新:
你得到的错误可能是因为 "navigation" 方法是从子测试启动的(每个 "t.it()" 或 "t.describe()" 部分创建一个单独的 "subtest")。这些子测试不会应用配置 - 它仅应用于顶级测试。一种解决方案是复制属性值:
// in the "methods" of the custom test class
processSubTestConfig : function (config) {
var cfg = this.SUPER(config)
cfg.myPackage = this.myPackage
...
return cfg
},
但这已经是高级的 Siesta 内部编码了。可能只使用函数参数会更简单..