gpt4 book ai didi

javascript - 等待来自 Async 、 Protractor 、 nodejs 的响应

转载 作者:行者123 更新时间:2023-11-30 16:19:22 25 4
gpt4 key购买 nike

我正在尝试创建一个辅助函数来进行异步调用,这是我的 Protactor 测试数据设置的一部分。有没有一种方法可以让我等待函数的响应,然后继续进行测试,这就是我想要做的。

所以基本上测试应该等到异步调用 lo loaddata() 完成。我已经阅读了有关 promise 的使用,但无法成功实现。

"use strict";

describe('sample passing test spec', function() {
describe('sample passing test suite', function() {
loaddata();
it('sample passing test', function () {
datall();
expect("1").toEqual("2");
});
});
});



loaddata() is basically making a socket connection

function loaddata(){
var net = require('net');

var client = new net.Socket();
client.connect(20000, '127.0.0.1', function() {
console.log('Connected');
client.write('Hello, server! Love, Client\n');
});


client.on('data', function(data) {
console.log('Received: ' + data);
client.destroy(); // kill client after server's response
});

client.on('close', function() {
console.log('Connection closed');
});

return "function execution over"

}

最佳答案

您需要调整 loaddata返回一个 promise,Protractor 会把它放在 Control Flow 上- 要解决的待处理 promise 队列:

function loaddata() {
var deferred = protractor.promise.defer();
var net = require('net');

var client = new net.Socket();
client.connect(20000, '127.0.0.1', function() {
console.log('Connected');
client.write('Hello, server! Love, Client\n');
});


client.on('data', function(data) {
console.log('Received: ' + data);
client.destroy(); // kill client after server's response
deferred.fulfill(true);
});

client.on('close', function() {
console.log('Connection closed');
});

return deferred.promise;
}

如果这是您需要在测试运行之前全局执行的操作,请将其放入 onPrepare() 并返回。如果 loaddata 返回一个 promise,Protractor 将首先解析它,然后才运行测试:

onPrepare: function () { 
return loaddata();
},

关于javascript - 等待来自 Async 、 Protractor 、 nodejs 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34971073/

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