gpt4 book ai didi

javascript - 如何在 mocha-chai 测试套件中顺序运行两个描述 block

转载 作者:行者123 更新时间:2023-11-30 11:25:34 24 4
gpt4 key购买 nike

在我的一个 mocha-chai 测试中,我有两个描述 block 。在每个描述 block 中,我至少有两个“it” block 。第二个 describe block 重复第一个 describe block 所做的类似事情以及一些额外的事情。当我运行时,我觉得两个描述 block 一个接一个地同时启动,导致测试用例失败。如果我通过注释掉其中一个描述 block 来单独运行它们,它们运行良好。

请注意,每次我清除数据库并从头开始运行时,我测试的每个 API 都是独立的,不依赖于其他描述 block 的结果。

如果我有两个以上的描述 block ,我如何对它们进行排序,以便第二个描述 block 在第一个之后运行,依此类推。

下面是我的代码:

var server;
var mongodb;

before(function (done) {
server = require('../../../app.js'); // same as "node app.js"
done();
})

after(function (done) {
server.close();
})

beforeEach(function (done){
clear_the_db();
done();
})

var json_obj = {"a":"b"};
function clear_the_db() {
var mongoObj = mongoose.model('modelname');
mongoObj.remove({}, function(err){
if(!err) {
console.log('MongoDb collections removed');
} else {
console.log('Error is= '+err);
}
})

describe('First:POST call to insert data into project', ()=> {
clear_the_db();
it('First:Creating project', (done) => {
chai.request(server)
.post('/create/myproject')
.send()
.end((err, res) => {
expect(res.statusCode).to.equal(200);
done();
});
});

it('First:Inserting data into created project', (done) => {
chai.request(server)
.post('/data/myproject')
.send(json_obj)
.end((err, res) => {
expect(res.statusCode).to.equal(200);
done();
});
});

});
describe('Second:POST call to insert data into project', ()=> {
clear_the_db();
it('Second:Creating project', (done) => {
chai.request(server)
.post('/create/myproject')
.send()
.end((err, res) => {
expect(res.statusCode).to.equal(200);
done();
});
});

it('Second:Inserting data into created project', (done) => {
chai.request(server)
.post('/data/myproject')
.send(json_obj)
.end((err, res) => {
expect(res.statusCode).to.equal(200);
done();
});
});

it('Second:Fetching data from the created project', (done) => {
chai.request(server)
.get('/data/myproject')
.end((err, res) => {
expect(res.statusCode).to.equal(200);
done();
});
});
});

https://mochajs.org/ 读取钩子(Hook)后更新了代码:

var server;
var mongodb;

before(function (done) {
server = require('../../../app.js'); // same as "node app.js"
done();
})

after(function (done) {
server.close();
})


var json_obj = {"a":"b"};
function clear_the_db() {
var mongoObj = mongoose.model('modelname');
mongoObj.remove({}, function(err){
if(!err) {
console.log('MongoDb collections removed');
} else {
console.log('Error is= '+err);
}
})
}

describe("This is outer-most describe", function() {
beforeEach(function (done){
clear_the_db();
})

describe('First:POST call to insert data into project', ()=> {
it('First:Creating project', (done) => {
chai.request(server)
.post('/create/myproject')
.send()
.end((err, res) => {
expect(res.statusCode).to.equal(200);
chai.request(server)
.post('/data/myproject')
.send(json_obj)
.end((err, res) => {
expect(res.statusCode).to.equal(200);
});
done();
});
});
});

describe('Second:POST call to insert data into project', ()=> {
it('Second:Creating project', (done) => {
chai.request(server)
.post('/create/myproject')
.send()
.end((err, res) => {
expect(res.statusCode).to.equal(200);
chai.request(server)
.post('/data/myproject')
.send(json_obj)
.end((err, res) => {
expect(res.statusCode).to.equal(200);
chai.request(server)
.get('/data/myproject')
.end((err, res) => {
expect(res.statusCode).to.equal(200);
});
});
done();
});
});
});
});

最佳答案

Mocha 测试默认按顺序运行。您必须在别处寻找问题。

可能的原因:

  1. 您的两个套件都具有相同的名称 -POST 调用以将数据插入项目
  2. 如果 clear_the_db(); 是异步的,则不能保证在运行 it() block 之前已完成执行。相反,您应该在 beforeEach Hook 回调中进行清理,并在任务完成后继续下一个测试用例。示例:

    function clear_the_db(doneCb) {
    var mongoObj = mongoose.model('modelname');

    mongoObj.remove({}, function(err){
    if(!err) {
    console.log('MongoDb collections removed');
    } else {
    console.log('Error is= '+err);
    }
    // call the Mocha done() callback function
    doneCb();
    });
    }

    // in your beforeEach hook, pass 'done' to 'clear_the_db'
    beforeEach(function (done){
    clear_the_db(done);
    });

关于javascript - 如何在 mocha-chai 测试套件中顺序运行两个描述 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48165823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com