【问题标题】:AssertionError [ERR_ASSERTION]: undefined == 390 in gitlabAssertionError [ERR_ASSERTION]: undefined == 390 in gitlab
【发布时间】:2022-01-16 08:39:42
【问题描述】:

我对 AssertionError [ERR_ASSERTION]: undefined == 390 in gitlab 有点困惑。

我想要关注:

Τhe sumSalaries (obj) 函数, 接受字段名称的对象 obj 作为参数 对应一个员工的名字,而对应的值为o 每个员工的工资。

获取以下代码:

export default function sumSalaries(obj) {


  let salaries = {
    John: 100,
    Jane: 160,
    Mike: 130
  };

  let sum = 0;
  for (let key in salaries) {
    if (salaries.hasOwnProperty(key)) {
      sum += salaries[key];
    }
  }
  obj = sum;
  console.log(obj);

}

sumSalaries();

测试必须做到以下几点:

import sumSalaries from "../test.js";
import assert from "assert";

describe("\n\ntest.js", () => {
  it("should return the correct sum", () => {
    [
      [
        {
          John: 100,
          Ann: 160,
          Pete: 130,
        },
        390,
      ],
      [
        {
          John: 80,
          Jane: 160,
          Mike: 190,
        },
        430,
      ],
      [
        {
          Charlie: 84,
          Victor: 160,
          Pete: 200,
        },
        444,
      ],
    ].map((obj) => {
      let salaries = obj[0];
      let sum = obj[1];
      assert.equal(sumSalaries(salaries), sum);
    });
  });
});

gitlab 给我的错误:

AssertionError [ERR_ASSERTION]: undefined == 390

【问题讨论】:

    标签: javascript object gitlab javascript-objects


    【解决方案1】:

    让我们看看你写了什么:

    export default function sumSalaries(obj) {
    
      let salaries = {
        John: 100,
        Jane: 160,
        Mike: 130
      };
    

    您的函数应该计算传入的薪水的总和,但您只是将自己的固定列表放在这里。因此,您的函数只会计算这三个薪水的总和。

    然后你继续把这些工资加起来,这似乎没问题:

      let sum = 0;
      for (let key in salaries) {
        if (salaries.hasOwnProperty(key)) {
          sum += salaries[key];
        }
      }
    

    参数obj 包含传入的薪水,但在这一行之后,它现在包含您从固定列表中计算出的薪水总和:

      obj = sum;
    

    然后你把这个总和写到控制台。或许对调试有用,但是一旦你完成了调试,就把这行去掉。

      console.log(obj);
    

    函数结束时没有遇到return 语句,因此您的函数返回undefined。这解释了为什么您会收到关于 undefined == 390 的断言:undefined 是您的函数返回的内容,390 是您的测试期望返回的内容。

    }
    

    那么你怎么能解决这个问题呢?

    首先,将函数参数名称obj改为salaries,去掉硬编码的工资。这使您的函数可以计算给定的薪水总和。

    其次,一旦你计算了总和,return 它。

    您应该得到以下结果,经过测试,它似乎可以工作:

    export default function sumSalaries(salaries) {
      let sum = 0;
      for (let key in salaries) {
        if (salaries.hasOwnProperty(key)) {
          sum += salaries[key];
        }
      }
      return sum;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 2021-05-02
      • 2019-09-16
      • 1970-01-01
      • 2021-09-30
      • 2019-03-07
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多