【问题标题】:Node js supertest is async?Node js supertest 是异步的?
【发布时间】:2015-08-06 13:11:34
【问题描述】:

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

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

});

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

【问题讨论】:

    标签: node.js supertest should.js


    【解决方案1】:

    在您的示例中,supertest 仅负责从request(app) 向下的链,因此实际上是describe()it() 调用的提供者决定了执行测试的顺序或缺少顺序,我猜是摩卡咖啡吧?

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

    【讨论】:

      【解决方案2】:

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

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

      下面是一个简单的例子:

      var should = require('should');
      var app = require('../../app');
      var request = require('supertest');
      
      describe('Create and check that the create was successfull', function() {
        var session;
      
        var new_user = {name:'Test',presume:'test',vast:'23'};
        var user_id;
      
        before (function(done){
      
        session = request.agent(app);
      
        session
           .post('/api/new_user')
           .send('new_user')
           .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){
      
          session
            .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();
            });
      
        });
      
        ...
      
      });
      

      【讨论】:

        猜你喜欢
        • 2018-09-29
        • 1970-01-01
        • 1970-01-01
        • 2018-05-15
        • 2019-02-07
        • 2018-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多