如何处理具有不同值的相同变量的JavaScript绑定?

时间:2019-09-20 06:12:01

标签: javascript node.js jestjs

我正在使用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);
    }

1 个答案:

答案 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');