gpt4 book ai didi

javascript - 测试 promise 导致未定义的值

转载 作者:行者123 更新时间:2023-12-02 14:15:30 25 4
gpt4 key购买 nike

当我测试代码时遇到此错误:

1) Sourcerer Testing:  getStatusCode :
Error: Expected undefined to equal 200

我不确定为什么我在测试中得到undefined,但当我运行代码时,我得到200。这可能是由于没有正确处理promises

Test code:

import expect from 'expect';
import rp from 'request-promise';
import Sourcerer from './sourcerer';


describe("Sourcerer Testing: ", () => {
let sourcerer = new Sourcerer(null);
const testCases = {
"https://www.google.com": 200,
// "www.google.com":
};

describe("getStatusCode", () => {
it("", () => {
for (let testCase in testCases) {
sourcerer.setSourcererUrl(testCase);
expect(sourcerer.url).toEqual(testCase);
expect(sourcerer.getStatusCode()).toEqual(testCases[testCase]);
}
});
});
});

代码:

import rp from 'request-promise';

export default class Sourcerer {
constructor(url) {
this.options = {
method: 'GET',
url,
resolveWithFullResponse: true
};
this.payload = {};
}

setSourcererUrl(url) {
this.url = url;
}

getSourcererUrl() {
return this.url;
}

analyzeSourcePage() {
rp(this.options).then((res) => {
console.log(res);
}).catch((err) => {
console.log("ERROR");
throw(err);
});

}

getStatusCode() {
rp(this.options).then((res) => {
console.log(res.statusCode);
return res.statusCode;
}).catch((err) => {
console.log("STATUS CODE ERROR");
return 0;
});
}
}

最佳答案

getStatusCode 不返回任何内容。它应该返回一个 promise :

getStatusCode() {
return rp(this.options)...
}

在这种情况下,规范将失败,因为它期望 Promise 对象等于 200。

这甚至更加复杂,因为规范是异步的,并且在规范完成之前应该等待几个 promise 。应该是这样的

    it("", () => {
let promises = [];
for (let testCase in testCases) {
sourcerer.setSourcererUrl(testCase);
let statusCodePromise = sourcerer.getStatusCode()
.then((statusCode) => {
expect(sourcerer.url).toEqual(testCase);
expect(statusCode).toEqual(testCases[testCase]);
})
.catch((err) => {
throw err;
});
promises.push(statusCodePromise);
}

return promises;
});

coPromise.all 提供了一个很棒的流量控制替代方案:

    it("", co.wrap(function* () {
for (let testCase in testCases) {
sourcerer.setSourcererUrl(testCase);
expect(sourcerer.url).toEqual(testCase);
let statusCode = yield sourcerer.getStatusCode();
expect(statusCode).toEqual(testCases[testCase]);
}
});

关于javascript - 测试 promise 导致未定义的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39070816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com