[英]protractor promise fn is not a function
编辑:我想我明白为什么它不起作用。 调用flow.execute(getSpendermeldung)时,我无法传递Arguments。 有人比在另一个函数中使用“全局”变量包装ApiCall更好吗? 我打算在另一个文件中使用它,并在必要时使用require。
原帖:对于我的量角器测试,我想从数据库中获取测试数据。 我使用nodejs http模块做到了这一点,到目前为止它正在运行。 由于我使用这些数据测试,我已经在同步问题中运行。 我用jasmines回调解决方案绕过他们。 然而,我发现这是不灵活的,并希望使用承诺和控制流程。 可悲的是,当我执行我的代码时,我得到一个错误: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:很想发布堆栈跟踪,但我没有得到正确的格式。
您需要返回延迟对象defer
而不是 defer.promise
。
其次,一个小小的修正,你在结束请求之前履行承诺。 你不应该这样做吗?
http.get(options, callback).end(function nowFulfillPromise() {
defer.fulfill('json parsed');
});
您正在调用函数 - getSpendermeldung
而不是将其作为参数传递。 是的,我认为你可以在不使用全局变量和使用另一个文件的require的情况下实现它
关于flow.execute
的参数的更多细节在这里
var apiCall = require('the-file-that-containsthe-function')
var flow = browser.controlFlow();
flow.execute(function(){return getSpendermeldung('D0000001')});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.