节点js supertest是异步的吗?

时间:2015-03-16 16:09:04

标签: node.js supertest should.js

我想为某些路线编写一些测试,我想做这样的事情:

var should = require('should');
var app = require('../../app');
var request = require('supertest');

describe('Create and check that the create was successfull', function() {
    var user_id = '';
  it('should add a new case and return a JSON array', function(done) {
    var newUser = {nume : 'Test', prenume: 'test', varsta : 23};
    request(app)
      .post('/api/new_user')
      .send(newUser)
      .expect(201)
      .expect('Content-Type', /json/)
      .end(function(err, res) {
        if (err) return done(err);
        res.body.should.be.instanceOf(Array);
        res.body.should.have.property('_id');
        user_id = res.body._id;
        done();
      });
  });

  it('should return the new user ', function(done) {
    request(app)
      .get('/api/new_user/' + user_id)
      .expect(200)
      .expect('Content-Type', /json/)
      .end(function(err, res) {
        if (err) return done(err);
        res.body.should.be.instanceOf(Object);
        res.body._id.should.be.exactly(user_id);
        done();
      });
  });

});

我不确定这两个语句是一个接一个地执行还是每个语句都是异步执行的,当我到达第二个语句时,第一个语句没有被执行因此它会失败因为插入没有在服务器。 我应该使用async.series吗?

2 个答案:

答案 0 :(得分:0)

在您的示例中,supertest仅负责request(app)向下的链,因此它实际上是确定订单的describe()it()来电的提供商,或者没有,你的测试被执行,我猜是mocha,对吗?

如果是这样,Mocha将按顺序运行您的测试用例(如第一个测试用例,第二个将在第一个完成后调用)。

答案 1 :(得分:0)

Supertest 请求无法保持会话,因此您的第二个测试用例似乎失败了。基本上是第二种情况,因为它根本不了解第一种情况。

您可以使用 request.agent 保留会话。

以下是一个简单的例子:

from collections import Counter
counts = Counter(lst)