Supertest + Express不会失败

时间:2015-05-21 21:19:29

标签: node.js express supertest

这或多或少是supertest test express middleware

的副本

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

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

据我所知,这将永远错误地通过。路径错误并期望使用不同的状态代码这一事实并不重要。

并且 - 更一般地说(没有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;
            }
    });
});

是否考虑过为什么会发生这种情况,或者如何实际测试这种情况?

2 个答案:

答案 0 :(得分:5)

使用supertest,您需要以某种方式终止您的链。

expect将完成回调作为第二个参数,您可以使用mocha回调构建。像这样:

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

指定这样的done选项将指示mocha等待,直到听到你的声音,然后才能进行下一次测试。

答案 1 :(得分:0)

区别在于参数: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
  })
})