Getting "TypeError: object is not a function" when using supertest/superagent in forEach loop

Getting "TypeError: object is not a function" when using supertest/superagent in forEach loop

我正在使用超级测试按照相同的规则测试一组 URL。

var urls = [
    "https://www.example.com",
    "https://www.example2.com"
];

urls.forEach(function (url) {
    console.log('begin');
    request = request(url)
        .get('')
        .expect(200)
        .end(function (err, res) {
            // Check for something
        });
    console.log('end');
});

当数组中只有1个URL时,它工作正常。但是,如果我添加第二个,它会失败并输出:

begin
end
begin

file.js:11
request = request(json)
^
TypeError: object is not a function

我的猜测是我不能有 1 个 supertest 运行 实例两次,但我似乎找不到解决此问题的解决方案。感谢任何帮助。

这是因为你的赋值request = request(url)覆盖了请求函数。

var urls = [
    "https://www.example.com",
    "https://www.example2.com"];

urls.forEach(function (url) {
    console.log('begin');
    var r = request(url)
        .get('')
        .expect(200)
        .end(function (err, res) {
        // Check for something
    });
    console.log('end');
});

在第一次迭代中,request 指的是一个全局函数,但是当对 request = request(url) 语句求值时,request 的值被更改为 [=15= 返回的值] 所以在第二次迭代中 request 不再是您期望的函数。

更改以下内容

request = request(url)
    .get('')
    .expect(200)
    .end(function (err, res) {
        // Check for something
    });

requestVariable = request(url)
    .get('')
    .expect(200)
    .end(function (err, res) {
        // Check for something
    });