Javascript 在单个函数中包装链式函数
Javascript wrapping chained functions in a single function
我正在使用 intern
进行一些 javascript 功能测试,并且想开始对我的测试代码进行一些抽象,以使其更具可重用性。我不确定这是否可能,但我正在努力实现以下目标 -
我的原始代码格式如下 -
this.remote.get(URL).setFindTimeout(5000).end()
.findByXpath(xpath).click().type('XXX').end().
.findByXpath(xpath).click().type('YYY').end()
.findByCSSSelector(css).click().doSelectBoxStuff().end() //and so on...
其中每一行可能是不同类型输入字段的输入。当输入这些不同的输入类型时,我试图将功能抽象成它们自己的函数,就像这样 -
this.remote.get(URL).setFindTimeout(5000).end()
.enterTextBox('XXX')
.enterTextBox('YYY')
.enterSelectBox('ZZZ')
function enterTextBox(val){
//execute .findByXpath(xpath).click().type(val).end()
}
function enterSelectBox(val){
//execute .findByCSSSelector(css).click().doSelectBoxStuff().end()
}
这样的事情可能吗?如果是这样,在我的两个新函数中会调用 .findByXPath(xpath)...
等吗?
如果您想执行链接,那么您的函数必须 return 您正在执行操作的 "Object"。
你绝对可以。只需将函数作为参数传递给函数。您可以通过更改对象的原型来为对象定义方法。所以为了实现你想要的行为,你会这样写:
// Ideally, replace this.remote.get(URL) with a base instance of the object
this.remote.get(URL).prototype.enterTextBox = function() {
return this.findByXpath(xpath).click().type(val).end()
}
this.remote.get(URL).setFindTimeout(5000).end()
.enterTextBox('XXX')
等关键是 return obj 以便它可以被链接。
我正在使用 intern
进行一些 javascript 功能测试,并且想开始对我的测试代码进行一些抽象,以使其更具可重用性。我不确定这是否可能,但我正在努力实现以下目标 -
我的原始代码格式如下 -
this.remote.get(URL).setFindTimeout(5000).end()
.findByXpath(xpath).click().type('XXX').end().
.findByXpath(xpath).click().type('YYY').end()
.findByCSSSelector(css).click().doSelectBoxStuff().end() //and so on...
其中每一行可能是不同类型输入字段的输入。当输入这些不同的输入类型时,我试图将功能抽象成它们自己的函数,就像这样 -
this.remote.get(URL).setFindTimeout(5000).end()
.enterTextBox('XXX')
.enterTextBox('YYY')
.enterSelectBox('ZZZ')
function enterTextBox(val){
//execute .findByXpath(xpath).click().type(val).end()
}
function enterSelectBox(val){
//execute .findByCSSSelector(css).click().doSelectBoxStuff().end()
}
这样的事情可能吗?如果是这样,在我的两个新函数中会调用 .findByXPath(xpath)...
等吗?
如果您想执行链接,那么您的函数必须 return 您正在执行操作的 "Object"。
你绝对可以。只需将函数作为参数传递给函数。您可以通过更改对象的原型来为对象定义方法。所以为了实现你想要的行为,你会这样写:
// Ideally, replace this.remote.get(URL) with a base instance of the object
this.remote.get(URL).prototype.enterTextBox = function() {
return this.findByXpath(xpath).click().type(val).end()
}
this.remote.get(URL).setFindTimeout(5000).end()
.enterTextBox('XXX')
等关键是 return obj 以便它可以被链接。