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