Javascript 量角器fn不是一个函数

Javascript 量角器fn不是一个函数,javascript,selenium-webdriver,promise,protractor,Javascript,Selenium Webdriver,Promise,Protractor,编辑:我想我理解它为什么不起作用。调用flow.execute(getSpendermeldung)时,我无法传递参数。有人比将ApiCall封装在另一个函数中并使用“全局”变量更好吗?我打算将其保存在另一个文件中,并在必要时使用require 原创帖子: 对于量角器测试,我想从数据库中获取测试数据。我使用nodejshttp模块完成了这项工作,到目前为止,该模块正在工作。由于我使用这些数据进行了测试,所以运行时出现了同步问题。我用茉莉花来对付他们。然而,我发现这是不灵活的,并且希望使用承诺和控

编辑:我想我理解它为什么不起作用。调用flow.execute(getSpendermeldung)时,我无法传递参数。有人比将ApiCall封装在另一个函数中并使用“全局”变量更好吗?我打算将其保存在另一个文件中,并在必要时使用require

原创帖子: 对于量角器测试,我想从数据库中获取测试数据。我使用nodejshttp模块完成了这项工作,到目前为止,该模块正在工作。由于我使用这些数据进行了测试,所以运行时出现了同步问题。我用茉莉花来对付他们。然而,我发现这是不灵活的,并且希望使用承诺和控制流。可悲的是,每当我执行代码时,我都会遇到一个错误: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,但我没有正确的格式。

您需要返回延迟对象
延迟
,而不是
延迟。承诺

第二,一个小的更正,在结束请求之前,您正在履行承诺。你不应该这样做吗

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

您需要返回延迟对象
defer
,而不是
defer.promise

第二,一个小的更正,在结束请求之前,您正在履行承诺。你不应该这样做吗

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

您正在调用函数-
getSpendermeldung
,而不是将其作为参数传递。是的,我认为您可以在不使用全局变量和使用来自另一个文件的require的情况下实现它

有关
flow.execute
的参数的详细信息如下


您正在调用函数-
getSpendermeldung
,而不是将其作为参数传递。是的,我认为您可以在不使用全局变量和使用来自另一个文件的require的情况下实现它

有关
flow.execute
的参数的详细信息如下


我试了一下,结果总是以无限循环结束。我假设这是因为get()调用end()隐式,而不是request()。然而,返回延迟似乎是错误的。在我的项目中,我总是返回延迟。我尝试了两次,总是以无限循环结束。我假设这是因为get()调用end()隐式,而不是request()。然而,返回延迟似乎是错误的。在我的项目中,我总是返回延迟。