2015-06-27 66 views
0

我正在使用茉莉花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) 

我的预期是,该毕竟被调用,而不考虑该试验方法抛出的错误。我真的不想试试我的测试。请让我知道这是茉莉花还是我使用茉莉花的问题。谢谢。

回答

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 
     }); 
    }); 
}); 
+0

如果做得不那么叫我希望超时和方法毕竟被称为。我有这个问题,任何测试都可能因语法错误或意外错误而失败。在这些情况下,毕竟没有被召唤。即使发生错误,我也希望在所有情况下都能被调用。 – planetjones

+1

由于被测单元的异步行为,它会以异常退出。 Jasmine会捕获同步异常,但不会异步,因为如果它是范围,它们就会失效。你甚至可以尝试'setTimeout(function(){a = b;},500);'并得到一个测试套件退出的'ReferenceError'。没有任何东西可以捕捉到这个异常,因此整个套件都会关闭很明显,如果套件停机,那么'afterAll'不会被调用。我必须是[已知问题](https://github.com/jasmine/jasmine/issues/529) –

+0

也许这个模块可以帮助你 - [茉莉花异步错误](https://www.npmjs。 COM /包/茉莉异步-错误)。 –