如何在开始Mocha测试用例之前添加延迟?

How to add a delay before starting a Mocha test case?(如何在开始Mocha测试用例之前添加延迟?)
本文介绍了如何在开始Mocha测试用例之前添加延迟?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Mocha为我的简单Node.js应用程序编写单元测试。这个应用程序有一个类,它连接到Mongo数据库,获取记录,并将公式化的记录存储为字段。简单地说,该类如下所示:

SampleClass.prototype.record = []; // Store the loaded record
SampleClass.prototype.init = function(db){
    var self = this;
    self.db = mongoose.connection; // Say we already have mongoose object initialized
    self.db.once('open',function(){
        /* schema & model definitions go here */
        var DataModel = mongoose.model( /* foobar */);
        DataModel.findOne(function(err,record){
           /* error handling goes here */ 

           self.record = record; // Here we fetch & store the data
        });
    });
}

从上面的代码片断可以看出,一旦调用了SampleClass.init()Sample.Records将不会立即从数据库填充。一旦触发事件"open",就会异步填充数据。因此,在SampleClass.init()之后可能会有延迟,直到Sample.Record填充完毕。

所以当我像这样编写Mocha测试时,它就变得复杂了:

var testSampleClass = new SampleClass();

describe('SampleClass init test',function(){
    testSampleClass.init('mydb');
    it('should have 1 record read from mydb',function(){
        assert.equal(testSampleClass.record.length,1);
    });
});

上述断言将始终失败,因为testSampleClass.Records不会在init之后立即填充。加载数据需要一定的时间间隔。

如何延迟测试用例,使其在调用testSampleClass.init几秒钟或更长时间后启动?是否也可以在我的类的事件被激发后立即触发测试用例?否则,这个简单的案例总是会失败,我知道这是完全不正确的。

推荐答案

使用before()beforeEach挂钩(请参阅here和here)。它们将done回调作为参数,当一些异步人员将要完成时,您必须调用该参数。因此您的测试应该如下所示:

describe('SampleClass init test',function(){
    before(function(done) {
        testSampleClass.init('mydb', done);
    });
    it('should have 1 record read from mydb',function(){
        assert.equal(testSampleClass.record.length,1);
    });
});

和您的初始化方法:

SampleClass.prototype.record = []; // Store the loaded record
SampleClass.prototype.init = function(db, callback){
    var self = this;
    self.db = mongoose.connection; // Say we already have mongoose object initialized
    self.db.once('open',function(){
        /* schema & model definitions go here */
        var DataModel = mongoose.model( /* foobar */);
        DataModel.findOne(function(err,record){
            /* error handling goes here */

            self.record = record; // Here we fetch & store the data
            callback();
        });
    });
}

这篇关于如何在开始Mocha测试用例之前添加延迟?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)