等待来自Async,Protractor,nodejs的响应
我正在尝试创build一个帮助器函数,这个函数是一个asynchronous调用,它是我的数据设置的一部分,用于protactortesting。 有没有一种方法可以等待函数的响应,然后继续进行testing,这是我正在做的。
所以基本上testing应该等到asynchronous调用lo loaddata()完成。 我已阅读有关承诺的使用,但无法成功实施。
"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
来返回一个承诺 , 这个承诺会把量angular器放在控制stream上 – 一个待解决的承诺队列:
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; }
如果这是在testing运行之前需要全局执行的事情,把它放到onPrepare()
并返回。 如果loaddata
返回一个promise,那么Protractor
将首先parsing它,然后才运行testing:
onPrepare: function () { return loaddata(); },