Leadfoot 的 pollUntil() 不触发变量值变化?
Leadfoot's pollUntil() Not Triggering on Variable Value Change?
我目前正在实习生中编写功能测试,运行 解决了一个小问题。
在我的测试套件的前面部分,我对 API 进行了 ajax 调用以检索变量的值。设置的这个变量对于功能测试的下一步至关重要,因此我想停止测试,直到变量从 ajax 调用返回。
我阅读了有关 Leadfoot 的 pollUntil() 函数的信息,听起来它完成了我需要做的事情。我写了下面的代码:
var valueThatChanges = 0;
// ... (some functional test setup stuff)
//Ajax call that sets value of valueThatChanges
.then(function() {
return ajaxCall(valueThatChanges);
})
//valueThatChanges is initially 0 before/during ajax call
//Is set to a randomly generated value that is non-zero after response recieved
.then(pollUntil(function(valueThatChanges) {
return valueThatChanges !== 0 ? true : null;
},[valueThatChanges], 30000, 100))
.then(function() { //On success
console.log('Value is no longer zero.')
}, function(error) { //On failure/timeout
console.log(error)
})
});
但是这不起作用,因为函数立即进入成功回调,尽管 valueThatChanges
的值仍然为 0。
我知道 pollUntil() 可能不是为处理这种情况而设计的(因为我没有直接处理 pollUntil 中的 DOM 元素),但我不确定为什么它不适用于此具体场景。
似乎 pollUntil() 没有在每次调用它的轮询函数时传递更新的变量。
pollUntil() 能否处理在变量值更改时触发事件?
pollUntil
的一般用例是您需要在远程浏览器中等待某事发生的情况。例如pollUntil
常用于等待功能测试页完全初始化:
// ---------------------
// functional test (in Node.js)
this.remote.get('testpage.html')
.then(pollUntil('return window.pageIsReady ? true : null'))
// rest of test
// ---------------------
// remote test page (in the browser)
<script>
var pageIsReady = false;
require( ..., function ( ... ) {
// do setup stuff
pageIsReady = true;
});
</script>
如果您在测试设置中做一些 不 涉及浏览器的异步操作,return 来自 before
函数在您的测试套件中将在异步操作完成时解析。
var valueThatChanges;
registerSuite({
before: function () {
return new Promise(function (resolve) {
// Assuming ajaxCall calls a callback when it's finished:
ajaxCall(function (newValue) {
valueThatChanges = newValue;
resolve();
});
});
},
test1: function () {
return this.remote
// rest of test
},
// ...
});
我目前正在实习生中编写功能测试,运行 解决了一个小问题。
在我的测试套件的前面部分,我对 API 进行了 ajax 调用以检索变量的值。设置的这个变量对于功能测试的下一步至关重要,因此我想停止测试,直到变量从 ajax 调用返回。
我阅读了有关 Leadfoot 的 pollUntil() 函数的信息,听起来它完成了我需要做的事情。我写了下面的代码:
var valueThatChanges = 0;
// ... (some functional test setup stuff)
//Ajax call that sets value of valueThatChanges
.then(function() {
return ajaxCall(valueThatChanges);
})
//valueThatChanges is initially 0 before/during ajax call
//Is set to a randomly generated value that is non-zero after response recieved
.then(pollUntil(function(valueThatChanges) {
return valueThatChanges !== 0 ? true : null;
},[valueThatChanges], 30000, 100))
.then(function() { //On success
console.log('Value is no longer zero.')
}, function(error) { //On failure/timeout
console.log(error)
})
});
但是这不起作用,因为函数立即进入成功回调,尽管 valueThatChanges
的值仍然为 0。
我知道 pollUntil() 可能不是为处理这种情况而设计的(因为我没有直接处理 pollUntil 中的 DOM 元素),但我不确定为什么它不适用于此具体场景。
似乎 pollUntil() 没有在每次调用它的轮询函数时传递更新的变量。
pollUntil() 能否处理在变量值更改时触发事件?
pollUntil
的一般用例是您需要在远程浏览器中等待某事发生的情况。例如pollUntil
常用于等待功能测试页完全初始化:
// ---------------------
// functional test (in Node.js)
this.remote.get('testpage.html')
.then(pollUntil('return window.pageIsReady ? true : null'))
// rest of test
// ---------------------
// remote test page (in the browser)
<script>
var pageIsReady = false;
require( ..., function ( ... ) {
// do setup stuff
pageIsReady = true;
});
</script>
如果您在测试设置中做一些 不 涉及浏览器的异步操作,return 来自 before
函数在您的测试套件中将在异步操作完成时解析。
var valueThatChanges;
registerSuite({
before: function () {
return new Promise(function (resolve) {
// Assuming ajaxCall calls a callback when it's finished:
ajaxCall(function (newValue) {
valueThatChanges = newValue;
resolve();
});
});
},
test1: function () {
return this.remote
// rest of test
},
// ...
});