为什么 Mocha 会通过这个 https.get 请求?

Why is Mocha passing this https.get request?

全新的测试。试图弄清楚为什么 mocha 在应该失败的时候通过了这个测试。

var assert     = require('assert');
var nock       = require('nock');
var https      = require('https');

describe('thing', function() {
    describe('foo', function () {
        it('makes the correct https call to API', function () {
            nock('https://example.com')
                .get('/foo')
                .reply(404);
            https.get('https://example.com/foo', function (response) {
                console.log(response.statusCode); // returns 404
                assert.equal(response.statusCode, 200); //passes
            });
        });
    });
});

Mocha,就像任何其他[正确编写的]Node.jsmodule/app一样,开箱即用异步运行。因为您的 https 调用比整个 Mocha 测试需要更长的时间来执行,所以 Mocha 永远没有机会在过程完成之前执行它的断言。

也就是说,Mocha 测试还支持回调,让您在执行断言之前执行长 运行 活动:

var assert     = require('assert');
var nock       = require('nock');
var https      = require('https');

describe('thing', function() {
    describe('foo', function () {
        it('makes the correct https call to API', function (done) {
            nock('https://example.com')
                .get('/foo')
                .reply(404);
            https.get('https://example.com/foo', function (response) {
                console.log(response.statusCode); // returns 404
                assert.equal(response.statusCode, 200); //passes
                done();
            });
        });
    });
});