Javascript 如何用Siesta覆盖testClass方法?
我正在使用Bryntum Siesta对ExtJS应用程序进行UI测试。我创建了一个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', {
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
},