TypeScript 无法识别来自超测试的请求响应中的对象?

TypeScript doesn't recognize an object in Request response from supertest?

我正在使用 Supertest 在 TypeScript 中为 非常 简单的 graphql API 编写测试。我收到此错误:Property 'data' does not exist on type 'Response',为什么会这样?我还没有告诉它那里会发生什么。但是我怎么能data 紧跟 should.

这是我的简短测试文件。

import chai from "chai";
import { expect } from "chai";
import * as request from "supertest";
import app from "../src";

describe("graphQl test", () => {

    it("should respond with hello world", async (done) => {

        const returned = await request(app)
            .post("/graphql")
            .send({ query: "{ hello }"})
            .expect(200)
            .end((err, res) => {
                if (err) { return done(err); }
                res.data.should.have.property("hello");
                done();
            });

        expect(returned.data.hello).equal("Hello world!");
    });
});

有没有简单的解决方法?如果没有,我想我必须创建某种接口,但在这种情况下我将如何创建接口并将该接口与 TypeScript 通信?我正在搜索,但我还没有看到这样的例子。

您只需要添加超级​​测试类型,这样编译器就会知道会发生什么。

可以这样做:

npm install --save @types/supertest

我已经安装了所有的输入法。在这种情况下,我认为问题在让 Mocha 与 ts-node 一起工作的过程中得到了解决。 ts-node 不适用于我的全局 typescript,所以我必须在本地安装它。然后我需要为我的测试添加一个单独的 tsconfig.json 文件并且 VSCode 不再给我这些错误并且编译工作正常。