繁体   English   中英

量角器承诺fn不是函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM