gpt4 book ai didi

asynchronous - 在 Protractor 中获取请求异步调用

转载 作者:行者123 更新时间:2023-12-03 11:09:54 27 4
gpt4 key购买 nike

我有一个测试用例,我的代码向服务器发出请求并检查具有指定日期的文件名是否存在。由于 GET 请求是异步调用,在检查它是否是指定日期之前,如何确保我从服务器获得文件名?

这是我的代码摘录:

var re = new RInterface();
it('data show exists', function() {
target.each(function(ele){
browser.actions().mouseMove(ele).perform();

re.get(function(result){
expect(result).toEqual(true);
});
});
});

RInterface.js

 var Service = function() {
var serv = this;
var uname = atob(settings.username);
var pwd = atob(settings.password);
var url = 'https://' + uname + ':' + pwd + '@' + settings.Url + '/' + settings.format + '/' + settings.period;
var completeURL = url;
var today = DateString();

serv.get = function(callback) {
var dataStrAry = [];
var count = 0;

request(completeURL, function (error, response, body) {
if (!error && response.statusCode == 200) {
var serverData = JSON.parse(body);

var split = serverData[serverData.length-1].Name.split(" ");
var target = split[split.length-1].split(".")[0];

// Check if the file with current date is available
// If it is, then assume data is saved on the server
if(target == today) {
console.log("equal");
callback(true);
}
else {
console.log("not equal");
callback(false);
}

}
else {
console.log("errror call");
callback(false);
return;

}
});

};

所以,re.get 是我向服务器发出 GET 请求的地方,我传递了在 get 请求结束时调用的回调函数。我认为问题是 Protractor 在我的代码从服务器获取数据之前完成了测试。如何强制 Protractor 等待以便我可以检查返回的数据?我当前的解决方法是将 get 请求放在 beforeEach 中,似乎 Protractor 强制测试等待它完成执行。

最佳答案

如果您希望控制流等待它,您需要使用 Promise 处理您的请求结果:

var re = new RInterface();
it('data show exists', function() {
target.each(function(ele){
browser.actions().mouseMove(ele).perform();

expect(re.get()).toEqual(true);
});
});
var Service = function() {
...
this.get = function() {
var defer = protractor.promise.defer();
...
request(completeURL, function (error, response, body) {
if (!error && response.statusCode == 200) {
var result = ...
defer.fulfill(result);
} else {
defer.reject(error);
}
});

return defer.promise;
};
};

关于asynchronous - 在 Protractor 中获取请求异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40588683/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com