我正在使用javascript绑定从一个文件获取变量值到另一个文件。我还根据测试用例场景更改了变量的值。因此,由于将多个值分配给同一变量会导致问题。我无法获得确切的值。我该如何克服?
sample.test.js [将多个值分配给同一变量URL的文件]
describe('GET Request', () => {
// Preparing
this.url = `sample/all`;
// Executing
testCase.validateResponseCode.bind(this)('get');
});
describe('POST Request', () => {
// Preparing
this.url = `sample/register`;
// Executing
testCase.validateResponseCode.bind(this)('post');
});
testCase.js [文件最终获得相同值的文件,即样本/全部]
validateResponseCode(requestMethod) {
it(`RESPONSE CODE VALIDATION: Validate response code for success scenario-${requestMethod}`, async () => {
let response;
switch (requestMethod) {
case 'post':
this.url
// code to perform post request
case 'put':
this.url
// code to perform put request
case 'delete':
this.url
// code to perform delete request
case 'get':
this.url
// code to perform get request
}
}, 20000);
}
答案 0 :(得分:0)
我认为您的问题是两种测试都获得了sample/register
。
请注意,测试不会立即以同步方式执行。您仅在注册它们(因此将回调传递给it
方法)。
您的准备代码将在执行任何测试之前立即执行。
为了准备测试方案,您需要使用beforeAll
函数,该函数恰好在特定describe
内部进行任何测试之前执行。
describe('GET Request', () => {
let args;
beforeAll(() => {
// an object as you your case is to pass multiple argument
args = { url: `sample/all` }
})
testCase.validateResponseCode('get', () => args);
});
请注意,args
不会通过引用传递,而只会通过getter传递。
您需要对validateResponseCode
进行一些小的更改,以便调用getter来获取args
变量。
validateResponseCode(requestMethod, argsGetter) {
it(`RESPONSE CODE VALIDATION: (...) ${requestMethod}`, async () => {
// now, this returns the expected values.
const args = argsGetter();
let response;
// (...)
另一种(更大的重构)解决方案是使用函数工厂,以便您可以创建如下范围的validateResponseCode
函数:
const createScopedValidateResponse = (args) =>
(method) => testCase.validateResponseCode(method, args);
// usage
const validateResponseCode = createScopedValidateResponse({ url: 'url' });
validateResponseCode('get');
validateResponseCode('post');