【问题标题】:How to test loop with jest?如何用玩笑测试循环?
【发布时间】:2022-02-09 15:35:27
【问题描述】:

我是开玩笑的新手。有一个任务要测试一个循环。

 let values = [];
    for (let i = 1; i <= 100; i++) {
      if (i % 3 === 0 && i % 5 === 0) {
        values.push("fizzbuzz");
      } else if (i % 3 === 0) {
        values.push("fizz");
      } else if (i % 5 === 0) {
        values.push("buzz");
      } else {
        values.push("-");
      }
    }

我做了以下。

require("./fizzBuzzLoop");

describe("loop for with fizzbuzz", () => {
   let values = [];

   test("define a conditions for string values in loop", () => {
      for (let i = 1; i <= 100; i++) {
         if (i % 3 === 0 && i % 5 === 0) {
            values.push("fizzbuzz");
            expect(values).toContain("fizzbuzz");
         } else if (i % 3 === 0) {
            values.push("fizz");
            expect(values).toContain("fizz");
         } else if (i % 5 === 0) {
            values.push("buzz");
            expect(values).toContain("buzz");
         } else {
            values.push("-");
            expect(values).toContain("-");
         }
      }
   });
});

我不完全理解应该如何测试循环。我会很感激你的帮助

【问题讨论】:

    标签: jestjs


    【解决方案1】:

    您无需在测试中编写循环。将动作包装在一个函数中,在测试中运行它并为函数的结果提供一个比较选项。

    例如:

    function fizzBuzz(n=100) {
      let values = [];
    
      for (let i = 1; i <= n; i++) {
        if (i % 3 === 0 && i % 5 === 0) {
          values.push("fizzbuzz");
        } else if (i % 3 === 0) {
          values.push("fizz");
        } else if (i % 5 === 0) {
          values.push("buzz");
        } else {
          values.push("-");
        }
      }
      return values
    }
    

    测试看起来像:

    require("./fizzBuzzLoop");
    
    describe("loop for with fizzbuzz", () => {
       test("define a conditions for string values in loop", () => {
          expect(fizzBuzz(15)).toEqual([ '-',
            '-',
            'fizz',
            '-',
            'buzz',
            'fizz',
            '-',
            '-',
            'fizz',
            'buzz',
            '-',
            'fizz',
            '-',
            '-',
            'fizzbuzz' ]);
    
       });
    });
    

    【讨论】:

      【解决方案2】:

      我找到了一个更通用的方法

              let values = [];
          for (let i = 1; i <= 100; i++) {
             if (i % 3 === 0 && i % 5 === 0) {
                values.push("fizzbuzz");
             } else if (i % 3 === 0) {
                values.push("fizz");
             } else if (i % 5 === 0) {
                values.push("buzz");
             } else {
                values.push("-");
             }
          }
      
             module.exports = values;
      

      问题的解决方案是在额头上完成的。但是您可以减少测试次数并一次检查整个阵列的合规性。

          const values = require('./fizzBuzzLoop');
          
          const expected = ['-',
          '-',
          'fizz',
          '-', 
          'buzz',
          'fizz', 
          '-', 
          '-', 
          'fizz', 
          'buzz', 
          '-', 
          'fizz', 
          '-', 
          '-', 
          'fizzbuzz', 
          '-', 
          '-', 
          'fizz', 
          '-', 
          'buzz', 
          'fizz', 
          '-', 
          '-', 
          'fizz', 
          'buzz', 
          '-', 
          'fizz', 
          '-', 
          '-', 
          'fizzbuzz',
          '-',
          '-', 
          'fizz', 
          '-', 
          'buzz', 
          'fizz', 
          '-', 
          '-', 
          'fizz', 
          'buzz', 
          '-', 
          'fizz', 
          '-', 
          '-', 
          'fizzbuzz', 
          '-', 
          '-', 
          'fizz', 
          '-', 
          'buzz', 
          'fizz', 
          '-', 
          '-', 
          'fizz',
          'buzz', 
      '-', 
          'fizz', 
          '-', 
          '-', 
          'fizzbuzz',
          '-',
          '-', 
          'fizz', 
          '-', 
          'buzz', 
          'fizz',
          '-', 
          '-', 
          'fizz', 
          'buzz', 
          '-', 
          'fizz', 
          '-', 
          '-',
          'fizzbuzz', 
          '-', 
          '-', 
          'fizz',
          '-', 
          'buzz', 
          'fizz', 
          '-', 
          '-', 
          'fizz',
          'buzz', 
          '-', 
          'fizz', 
          '-', 
          '-', 
          'fizzbuzz', 
          '-', 
          '-', 
          'fizz', 
          '-', 
          'buzz',
          'fizz',
          '-',
          '-', 
          'fizz', 
          'buzz'];
          
          describe("loop for with fizzbuzz", () => {
             test("check array for matching values", () => {
                expect(expected).toEqual(values);
             });
          });
      

      【讨论】:

        猜你喜欢
        • 2020-06-30
        • 2021-02-10
        • 2020-07-31
        • 1970-01-01
        • 1970-01-01
        • 2021-08-17
        • 2018-01-29
        • 2019-02-22
        • 2018-08-12
        相关资源
        最近更新 更多