【问题标题】:Supertest + Express won't failSupertest + Express 不会失败
【发布时间】:2015-05-21 21:19:28
【问题描述】:

这或多或少是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;
            }
    });
});

有没有想过为什么会发生这种情况,或者如何实际测试这种情况?

【问题讨论】:

    标签: node.js express supertest


    【解决方案1】:

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

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

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

    像这样指定 done 选项将指示 mocha 等到收到您的回复后再进行下一个测试。

    【讨论】:

    • 我没有传递回调,因为我需要同步执行测试。我尝试了第二个选项,但是第二个选项中传递给 end 的回调永远不会被命中,因此永远不会抛出错误。
    • 如果“同步”是指您需要在测试 B 运行之前完成测试 A,那么将 done 回调指定为 it 的第二个参数将为您实现此目的。我已经简化了我的答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2016-03-15
      相关资源
      最近更新 更多