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

标签 javascript node.js sockets asynchronous protractor

我正在尝试创建一个辅助函数来进行异步调用,这是我的 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/

相关文章:

node.js - 方法 "collection.find()"最多接受两个参数

mysql - 无法使用 mysql 检索 Sequelize 的模型名称

java - Android Socket 客户端接收数据

javascript - 使用 JSON 值实现数组交集

javascript - 对象没有方法使用

javascript - 如何通过单个 react 选择正确使用 Yup 模式?

javascript - $uid 节点如何在 firebase-realtime-database 规则上工作?

javascript - Nodejs 中间件在两个文件中

java - spring tcp 套接字,授权客户端并处理未决响应

scala - Akka TCP 客户端 : How can I send a message over TCP using akka actor