Jasmine after在抛出错误时不会被调用

时间:2015-06-27 21:30:14

标签: javascript unit-testing jasmine

我正在使用Jasmine 2.3.1。以下规范执行导致未调用afterAll方法:

var http = require('http');

describe("simple server tests:", function() {

    afterAll(function(done) {
        console.log('after all');
    });

    it("throws an error because server is not running", function(done) {
        http.get("http://127.0.0.1:8080", function(res) {
            res.on('data', function(data) {
                done();
            });
        });
    });   
});

控制台显示:

[23:25:24] Starting 'test'...
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: connect ECONNREFUSED
    at exports._errnoException (util.js:746:11)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1010:19)

我的期望是调用afterAll,而不管测试方法中抛出的错误。我真的不想试试我的测试。如果这是Jasmine或我使用Jasmine的问题,请告诉我。感谢。

1 个答案:

答案 0 :(得分:0)

所有规范完成后都会调用

afterAll,但是你的情境服务器没有运行,因此永远不会调用done()。如果您正在测试服务器没有运行,我建议为请求添加错误处理程序并在其中执行done()

var http = require('http');

describe("simple server tests:", function() {

    afterAll(function(done) {
        console.log('after all');
        done(); // do not forget to execute done if you use it
    });

    it("throws an error because server is not running", function(done) {

        http.get("http://127.0.0.1:8080", function(res) {
            res.on('data', function(data) {
                // never called
            })
        }).on('error', function(e) {
            console.log("Got error: " + e.message);
            done(); // finish async test
        });
    });
});