在外部文件中构建Mocha / chai测试以供重用

时间:2018-12-03 18:42:00

标签: javascript node.js mocha require chai

我目前正在重写邮递员测试,以通过mocha / chai通过node运行,希望简化代码以使其更可重用。在较高的层次上,我必须发出一系列异步请求,使用一个响应中的数据发出下一个请求。所有测试用例以相同的顺序使用相同的请求,但是具有不同的数据(基于响应),不同的测试,并且可能会跳过某些请求。因此,例如,在我的第一个测试用例中,我希望前两个异步请求以200状态进行响应,进行第三个异步调用,然后验证响应中的一些数据点。但是,在第二个测试用例中,我可能只想进行第一个异步调用并测试响应中的某些数据点。

在邮递员中,所有这些测试都是重复的,因为无法重复使用,因此我将它们合并到了自己的文件中(每个请求都是自己的文件,并且相关测试的组也都是自己的) ,并试图使用require来运行它们。

在main.js中,我根据堆栈溢出herehere上的发现设置了以下内容。我还尝试过使用here所示的beforeEach,因为我可以在所有测试案例中始终运行相同的3个异步请求。我也尝试遵循this approach,但是仍然遇到相同的问题,即在require文件中没有执行任何测试。

这是我设置main.js的方式:

async function doRequest(path,requestObj) {
    return await require(path)(requestObj);
}

async function doTest(path, response, options){
    return await require(path)(response,options);
}

async function runTestCase(path, requestObj, tests){
    let response = await doRequest(path, requestObj);
    for(var i=0; i<tests.length; i++){
        doTest(tests[i].path, response, tests[i].options);
    }
}

for(i=0; i<global.testDataArray.length; i++){
    jsonRequest.setRequestData(global.testDataArray[i].prop1, global.testDataArray[i].prop2);
    testTitle = 'Testing ' + global.testDataArray[i].testCase + " using: " + jsonRequest.getRequestData().prop1 + ":" + jsonRequest.getRequestData().prop2;
    curTestConfig = global.testConfig.testCases[global.testDataArray[i].testCase];
    tests = curTestConfig.steps;

    describe(testTitle, function () {
        // TESTS
        this.timeout(global.constants.timeout);
        runTestCase(tests[i].requestPath,jsonRequest.getRequestData(),tests[i].tests);
    });
}

我的测试配置是这样设置的:

module.exports = {
    testCases : {
        'Test Case 1' : {
            steps : [
                {   requestPath : '../test/lib/requests/search.js',
                    tests : [
                        { path : '../test/lib/test1.js', options : { response: 200 } },
                        { path : '../test/lib/test2.js', options : { value: 100 } },
                        { path : '../test/lib/test3.js', options : { hasLink: true} }
                    ]
                },
                {   requestPath : '../test/lib/requests/getDetails.js',
                    tests : [
                        { path : '../test/lib/test1.js', options : { response: 200 } },
                        { path : '../test/lib/test2.js', options : { value: 365 } },
                        { path : '../test/lib/test3.js', options : { hasLink: false} }
                    ]
                }
            ]
        },
        'Test Case 2' : {
            steps : [
                {   requestPath : '../test/lib/requests/search.js',
                    tests : [
                        { path : '../test/lib/test1.js', options : { response: 200 } },
                        { path : '../test/lib/test3.js', options : { hasLink: false} }
                    ]
                },
                {   requestPath : '../test/lib/requests/setDetails.js',
                    tests : [
                        { path : '../test/lib/test1.js', options : { response: 200 } },
                        { path : '../test/lib/test4.js', options : { fName: "jane", lName: "doe" } },
                        { path : '../test/lib/test5.js', options : { location: "usa"} }
                    ]
                }
            ]
        }
    }
}

和测试文件(下面的test1.js)的设置如下:

let chai = require('chai');
let chaiHttp = require('chai-http');
let chaiXml = require('chai-xml');

chai.use(chaiHttp);
chai.use(chaiXml);

let expect = require('chai').expect;
let should = chai.should();

module.exports = function(result, options) {
    var testTitle = 'should have a status of ' + options.statusCode;
    it(testTitle, function () {
        expect(result).to.have.status(options.statusCode);
    });
};

似乎我没有尝试执行节点无法执行的任何操作,mocha / chai无法执行该操作,但是it()都没有执行过。感谢您的任何提前帮助。

0 个答案:

没有答案