Supertest + Express不会失败

这或多或less是超级testingexpression中间件的副本

但一年后,我想我会开始一个新的问题。

var express = require('express'); var request = require('supertest'); var app1 = express(); app1.get('/myapp', function (req, res) { res.send(200, { name: 'myapp' }); }); request = request(app1); it('should fail', function () { request .get('/hahahahahahahaha') .expect(123); }); 

据我所知,这总是会错误地通过。 path错误并期待不同的状态码这一事实并不重要。

而且 – 更一般地(没有Express),它看起来总是通过:

 it('should fail', function () { request('http://thisdoesnotexist.mydomain') .get() .expect(200); }); 

这也不起作用:

 it('should fail', function () { request('http://thisdoesnotexist.mydomain') .get() .expect(200) .end(function (err, res) { if (err) { throw err; } }); }); 

任何想到为什么发生这种情况,或者如何实际testing这种情况?

超级超凡,你需要以某种方式终止你的链条。

expect将采取一个完成的callback作为第二个参数,并且你可以使用mochacallback中的构build。 像这样:

 describe('potato', function() { it('should fail', function(done) { request .get('/hahahahahahahaha') .expect(123, done); }); }); 

指定一个done选项将指示摩卡咖啡等待,直到听到你的声音,然后再继续下一个testing。

不同的是参数: done

 describe('XXX', function() { it('XXX', function() { // always passing }) }) describe('YYY', function(done) { it('YYY', function() { // always passing }) }) describe('ZZZ', function() { it('ZZZ', function(done) { // normal }) })