当承诺得到解决时,mocha运行测试

时间:2017-07-23 16:50:34

标签: javascript node.js asynchronous mocha

我想测试我的Express应用。在应用程序准备就绪和承诺解决之前,我会做一些异步设置。所以我把测试放在then函数中,但它们没有运行。

Mocha没有错误,而是报告" 0测试通过"。当我正常运行应用程序(node server.js)时,一切正常。

如何在then函数中运行测试?

const app = new App();

app.ready.then(() => {
    const express = app.express;

    describe("GET api/v1/posts", test( () => {

        beforeEach((done) => {
            instance.testHelper();
            done();
        });

        it("responds with array of 2 json objects", () => {
            return chai.request(express).get("/api/v1/posts")
                .then((res: ChaiHttp.Response) => {
                    expect(res.status).to.equal(200);
                    expect(res).to.be.json;
                    expect(res.body).to.be.an("array");
                    expect(res.body.length).to.equal(2);
                });
        });

        it("json objects has correct shape", () => {
            return chai.request(express)
                .get("/api/v1/posts")
                .then((res: ChaiHttp.Response) => {
                    const all: Post[] = res.body as Post[];
                    const post: Post = all[0];

                    expect( post ).to.have.all.keys( ["id", "author", "text"] );
                });
        });
    }));
})
.catch( (err) => {
    console.err(err);  // no errors!
});

1 个答案:

答案 0 :(得分:0)

您想使用before挂钩,并稍微重新构建您的测试。 下面的代码应该可以工作(但是我没有在设置了mocha的计算机上输入这个代码,所以我无法测试它。)

const app = new App();
describe('the test to run', () => {
    let express = null;
    before((done) => {
        app.ready.then(() => {
            express = app.express;
            done();
        });
    });

    it("test here", () => {
        // some test
    });
});