如何针对POST和GET请求同步运行Mocha测试

问题描述

我为沙发床数据库构建了一个API,目前正在为我的HTTP请求使用mocha编写测试。我遇到的问题是我的GET请求测试找不到与POST请求测试一起添加的数据。如果在测试运行之前数据库中已经存储了数据,则GET请求测试将通过。但是它返回的数据不包括POST请求测试中新添加的数据。我需要能够在干净的数据库上运行测试,并使所有测试通过。我认为问题是由于Mocha的异步特性引起的,但我不确定如何解决此问题。这是我的测试用例。

依赖项

const expect = require('chai').expect;
const request = require('supertest');
const app = require('../src/app');

POST请求测试

describe(`POST requests`,()=>{
  it('Add new data',function() {
    return request(app)
      .post('/someendpoint')
      .set('Accept','application/json')
      .set('Authorization',auth_token)
      .send(newData)
      .expect(200)
      .then( function(res) {
        expect(res.body).be.a('Object');
        expect(res.body.id).be.a('string');
        id = res.body.id;
      })
    });
  });

获取请求测试

describe('GET requests',function() {
  it('Get data',function() {
    return request(app)
      .get('/someendpoint')
      .set('Accept',auth_token)
      .expect(200)
      .then((res) => {
        expect(res.body).be.a('Array');
      })
    });
  });

如果有帮助,也可以。每次发出POST请求时,都会在沙发床数据库中创建一个新文档

这是我发现的糟糕解决方案(编辑)

    before('timer for get data',function(){
        for(let i = 0; i < 1000000000; i++){
        }
    })
    
    it('get data',function() {
        return request(app)
        .get('/someendpoint')
        .set('Accept','application/json')
        .set('Authorization',auth_token)
        .expect(200)
        .then((res) => {
            expect(res.body).be.a('Array');
        });
    });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)