如何使用Mocha Chai组织用于单元测试BDD的代码

How to organize code for unit testing BDD using Mocha Chai?

本文关键字:单元测试 BDD 代码 用于 何使用 Mocha Chai      更新时间:2023-09-26

我尝试使用BDD风格的Mocha/Chai进行单元测试。不知道从哪里开始。下面是核心代码结构。假设getTemplates是一个ajax调用,我该如何处理应用程序的不同阶段。例如,在init函数中点击sh.setTemplates()之前,它经历了一些条件。如何对这些条件进行单元测试?

// Javascript     
function myFunc(id){
var mf = this;
mf.id = id;
mf.init = function(){return init()};
mf.isIdValid = function(){return isIdValid()};
mf.setTemplates = function(){return setTemplates};
mf.getTemplates = function(){return getTemplates};
// Init
mf.init();

///////////////////////
function init(){
    if(!id){
        return false;
    }

    if(!sh.isIdValid()){
        return false;
    }
    sh.setTemplates();
}

///////////////////////
function setTemplates(){
    getTemplates(function(callBackTemplate){
        if(!callbackTemplate){
            return false;
        }
        // inject to dom
    });
}
///////////////////////
// Async call
function getTemplates(){
    return '<div>Test</div>';
}
}

///////////////////////////////////////
/////////////////////////////////////////
TEST JS Mocha/Chai
var expect = chai.expect;
describe('myFunc Class', function(){
var mf;
before(function(){
    mf = new myFunc(1);
});

describe('mf.init()', function(){
    it('should not result false', function(){
        var result = mf.init();
        expect(result).to.not.equal(false);
    });

});

如何对这些条件进行单元测试?

使用以下流程:

  • 创建分支函数
  • 将断言放入分支函数
  • 将变体用作参数
  • 用真实的价值来称呼它一次
  • 用一个错误的值再次调用它

参考

  • BDD和Fluent断言
  • Eclipse Orion:运行测试