【发布时间】:2020-12-23 07:38:28
【问题描述】:
我为 couchbase 数据库构建了一个 API,我目前正在使用 mocha 为我的 HTTP 请求编写测试。我遇到的问题是我的 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;
})
});
});
GET 请求测试
describe('GET requests', function() {
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');
})
});
});
另外,如果它有所作为。每次发出 POST 请求时,都会在 couchbase 数据库中创建一个新文档
这是我发现的一个糟糕的解决方案(编辑)
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');
});
});
【问题讨论】:
-
那你为什么把它分成两个测试呢?这是一项测试,包含多个步骤。
-
因为我有我所有的测试,基于请求的类型:POST、GET、PUT、DELETE,分组在一起,在不同的“描述”中。将它们结合在一起,是解决这个问题的唯一方法吗?
-
您是否使用
--parallel或-p标志运行测试?检查你的 npm 任务是否有 mocha 命令,没有那个 mocha 应该按照你编写它的顺序运行你的测试.. -
我是这样做的:
xhttp.open("POST", "http://localhost:3000/myPostApi", false); // false === synchronous/blocking
标签: node.js express mocha.js couchbase chai