Make only 1 http call for chai-http unit-testing in Node?

chai, mocha.js, node.js, testing, unit-testing

Solution

Yep, like this:

describe("github test", function () {
    var res;

    before(function (done) {
        chai.request(...)
            .get(..)
            .req(...)
            .res(function (response) {
                res = response; // Record the response for the tests.
                done(); // Tell mocha that the ``before`` callback is done.
            });
    });

    it("should connect with a 200 status", function () {
        expect(res).to.have.status(200);
    });

    it("should whaterver", function () {
        expect(res).whatever;
    });
});

I notice you did not use the `done` callback in your example. It's really important to use it for asynchronous tests. In the code I show above, the `before` callback is asynchronous but the tests themselves are synchronous.

Problem

I'm trying out the chai-http plugin for Mocha/Chai. Which wraps around Superagent. Everything seems to work well, except I'm wondering... Shouldn't I be able to make the http call once and write separate tests for each? The tests seem to expect you to write your assertion inside the response function like so: ``` describe "github test", -> it "should connect with a 200 status", -> chai.request(githubReqObj.base) .get(githubReqObj.url) .req (req) -> req.set 'Accept': 'application/vnd.github.beta+json' return .res (res) -> expect(res).to.have.status 200 ``` But I want to run several assertions, and have each of them under their own "it" block. Is there a way to run ``` before -> ``` And then just call my assertions on the value of response?

Original source