我目前正在重写邮递员测试,以通过mocha / chai通过node运行,希望简化代码以使其更可重用。在较高的层次上,我必须发出一系列异步请求,使用一个响应中的数据发出下一个请求。所有测试用例以相同的顺序使用相同的请求,但是具有不同的数据(基于响应),不同的测试,并且可能会跳过某些请求。因此,例如,在我的第一个测试用例中,我希望前两个异步请求以200状态进行响应,进行第三个异步调用,然后验证响应中的一些数据点。但是,在第二个测试用例中,我可能只想进行第一个异步调用并测试响应中的某些数据点。
在邮递员中,所有这些测试都是重复的,因为无法重复使用,因此我将它们合并到了自己的文件中(每个请求都是自己的文件,并且相关测试的组也都是自己的) ,并试图使用require来运行它们。
在main.js中,我根据堆栈溢出here和here上的发现设置了以下内容。我还尝试过使用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()都没有执行过。感谢您的任何提前帮助。