Структурирование тестов mocha / chai во внешних файлах для повторного использования - PullRequest
0 голосов
/ 03 декабря 2018

В настоящее время я переписываю тесты почтальона для запуска через узел с mocha / chai в надежде упростить код для повторного использования.На высоком уровне я должен сделать серию асинхронных запросов, используя данные из одного ответа, чтобы сделать следующий запрос.Все тестовые случаи используют одни и те же запросы, в том же порядке, но с разными данными (на основе ответов), разными тестами и могут пропустить некоторые запросы.Так, например, в моем первом тестовом примере я хочу, чтобы первые два асинхронных запроса отвечали со статусом 200, делали третий асинхронный вызов и затем проверяли некоторые точки данных в ответе.Однако в моем втором тестовом примере я могу захотеть сделать только первый асинхронный вызов и проверить некоторые точки данных в ответе.

В почтальоне все эти тесты реплицируются, так как нет возможности использовать их повторно, поэтому яобъединил их в свои собственные файлы (каждый запрос - это собственный файл, и группы связанных тестов также являются их собственными), и я пытаюсь использовать require для их запуска.

В моем main.js,Я установил следующее на основании того, что обнаружил при переполнении стека здесь и здесь .Я также попытался использовать beforeEach, как показано здесь , так как я в порядке, просто всегда выполняю одни и те же 3 асинхронных запроса во всех тестовых случаях.Я также пытался следовать этому подходу , но я все еще сталкиваюсь с той же проблемой, что и ни один из тестов, выполняющихся в требуемых файлах.

Вот как я настроил свой 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 () никогда не выполняется.заранее спасибо за любую помощь.

...