2017-02-17 48 views
1

编辑:我想我明白为什么它不工作。调用flow.execute(getSpendermeldung)时,我无法传递参数。有人比其他函数包装ApiCall并使用“全局”变量更好?我打算在另一个文件中有这个,并在必要时使用require。量角器诺言fn不是函数

Original Post: 对于我的量角器测试,我想从数据库中获取测试数据。我使用nodejs http模块执行此操作,该模块目前正在运行。由于我测试这个数据我已经运行在同步问题。我用茉莉花回调解决方案解决了它们。不过,我觉得这是不灵活的,并希望使用承诺和控制流程。可悲的是,当我执行我的代码时,我得到一个错误:fn不是函数。在webdriver的/ lib中某处深/ promise.js

这是我的函数:

function getSpendermeldung(kennnummer) { 
var http = require('http'); 

var defer = protractor.promise.defer(); 

var options = { 
    host: 'localhost', 
    path: '/blabla/' + kennnummer 
}; 

var callback = function (response) { 
    var body = ''; 
    response.on('data', 
     function (chunk) { 
      body += chunk; 
     }); 
    response.on('end', 
     function() { 
      spendermeldung = JSON.parse(body); 
      defer.fulfill('json parsed'); 
     }); 
}; 

http.get(options, callback).end(); 

return defer.promise; 
} 

我叫它这个:

var flow = browser.controlFlow(); 
flow.execute(getSpendermeldung('D0000001')); 

有人有一个想法,我缺少的是什么。谢谢。

PS:很想发布stacktrace,但我没有得到正确的格式。

回答

0

您调用的函数 - getSpendermeldung,而不是将它作为一个参数。是的,我想你可以实现它,而无需使用全局变量和使用来自其它文件的要求对争论

更多细节flow.executehere

var apiCall = require('the-file-that-containsthe-function') 
var flow = browser.controlFlow(); 
flow.execute(function(){return getSpendermeldung('D0000001')}); 
0

您需要返回延期对象defer而不是defer.promise。其次,一个小小的更正,你在结束请求前履行承诺。你不应该这样做吗?

http.get(options, callback).end(function nowFulfillPromise() { 
    defer.fulfill('json parsed'); 
}); 
+0

我给双方一个尝试,总是在结束无限循环。我认为这是因为get()调用end()隐式,而不是request()。但是,返回推迟似乎是错误的。 – Transzendental

+0

在我的项目中,我一直都会推迟推迟。 – nilesh

相关问题