为什么Mocha传递这个https.get请求?

时间:2015-08-21 01:04:26

标签: node.js https mocha nock

全新的测试。试图弄清楚为什么摩卡应该失败时通过这个测试。

d:\bat>dir /B "d:\final\*.*"

d:\bat>for /F "delims=" %i in ('dir /B /A:D "d:\test\*.*"') do @copy /B /Y "d:\test\%~i\*.*" "d:\final\*.*" 2>NUL
d:\test\31441809\ttt.txt
        1 file(s) copied.
d:\test\ProcMon\LogfileAcrord32Start.CSV
d:\test\ProcMon\LogfileIE.CSV
d:\test\ProcMon\LogfileIEStart.CSV
d:\test\ProcMon\LogfileSwriter.CSV
d:\test\ProcMon\LogfileSwriterStart.CSV
        5 file(s) copied.
d:\test\ScreenCaptures\*.*
        0 file(s) copied.
d:\test\set\HKCU.txt
d:\test\set\hklm.txt
d:\test\set\regs.txt
d:\test\set\set.txt
d:\test\set\t!exclam!t.txt
        5 file(s) copied.

d:\bat>dir /B "d:\final\*.*"
HKCU.txt
hklm.txt
LogfileAcrord32Start.CSV
LogfileIE.CSV
LogfileIEStart.CSV
LogfileSwriter.CSV
LogfileSwriterStart.CSV
regs.txt
set.txt
t!exclam!t.txt
ttt.txt

d:\bat>

enter image description here

1 个答案:

答案 0 :(得分:2)

Mocha,就像任何其他[正确编写的] Node.js模块/应用程序一样,可以开箱即用地异步运行。因为您的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();
            });
        });
    });
});