摩卡 it() 测试只有在没有事先测试的情况下才能通过



我正在测试一个MEAN应用程序。每个测试只是确保我得到正确的响应代码。在我的路由器中,他们使用 res.send() 成功返回 json。

这里给出的第二个测试只有在第一个被注释掉的情况下才会通过。如果我注释掉第一个测试,第一个测试通过,但第二个测试超时。

此行为并非这两个测试所独有。在"它接受纬度和长度"之前,还有另一个测试。如果我把它注释掉,接受纬度和长的作品。如果我把它留在里面,接受纬度和长时间。我需要做什么才能使这些异步测试通过?

我尝试将超时设置为 60 秒,但这也不起作用。

var assert = require('assert');
var server = require('../bin/www');
var request = require('supertest');
request = request('http://localhost:3000');
describe('POST service request', function(){
    this.timeout(5000);
    var postRequest = request.post('/requests.json').type('form');
... (other commented out tests) ...
// it('accepts lat and long', function (done){
//  postRequest.send({
//      service_code: 2000,
//      long: 400,
//      lat: 3003
//  }).expect(200, done);
// });

    it('accepts an address id only', function (done){
    console.log('22222')
        postRequest.send({
            service_code: 100,
            address_id: 400
        }).expect(200, done);
    });
});

以下是它们都未注释时的一些记录输出:

Listening on port 3000
  POST service request
===REQUEST STARTED===
Trying to save a request.
DB connected.
Saved.
POST /requests.json 200 40.368 ms - 49
    ✓ accepts lat and long (47ms)
22222
1) accepts an address id only

  1 passing (5s)
  1 failing
  1) POST service request accepts an address id only:
     Error: timeout of 5000ms exceeded
      at null.<anonymous> (/usr/lib/node_modules/mocha/lib/runnable.js:159:19)
      at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

npm ERR! Test failed.  See above for more details.
npm ERR! not ok code 0

然后它超时了。

您不能在测试之间重复使用相同的 postRequest,因为send请求会产生副作用。在每个测试中创建一个新请求:

it('accepts lat and long', function (done){
    request.post('/requests.json').type('form').send({
        service_code: 2000,
        long: 400,
        lat: 3003
    }).expect(200, done);
});
it('accepts an address id only', function (done){
    request.post('/requests.json').type('form').send({
        service_code: 100,
        address_id: 400
    }).expect(200, done);
});

最新更新