【问题标题】:How to test ejs/nodejs function with mocha/chai?如何使用 mocha/chai 测试 ejs/nodejs 功能?
【发布时间】:2020-08-18 02:02:25
【问题描述】:

我在需要测试的 ejs/nodejs 应用程序中有一个函数。该函数添加一个用户(名称和 4 个字母等级的数组)。我想测试该函数以验证它是否添加了一个用户。

功能:

router.addUsers = (req, res) => {
  console.log("in homeController addUser");

  var newUserName = req.body.name;
  console.log("name " + newUserName);
  var newUsergrade = req.body.grade;

  var temp = 0;
  newUsergrade.forEach(letter => {
    letter = letter.toUpperCase();
    switch (letter) {
      case 'A':
        letter = 4.0
        break
      case 'A-':
        letter = 3.7
        break
      case 'B+':
        letter = 3.3
        break
      case 'B':
        letter = 3.0
        break
      case 'B-':
        letter = 2.7
        break
      case 'C+':
        letter = 2.3
        break
      case 'C':
        letter = 2.0
        break
      case 'C-':
        letter = 1.7
        break
      case 'D+':
        letter = 1.3
        break
      case 'D':
        letter = 1.0
        break
      case 'F':
        letter = 0.0
        break
    }
    temp += letter;
  });

  var valid = false;

  if (temp / 4 >= 2.5) {
    valid = true;
  } else {
    vaild = false;
  }

  col.insertOne({
    name: newUserName,
    grade: newUsergrade,
    isValid: valid
  }, function(err, r) {
    test.equal(null, err);
    test.equal(1, r.insertedCount);
    col.find({}).toArray((err, userData) => {
      console.log("record found: ", userData);
      usersArray = userData;
    });

  });

  usersArray.push({
    name: newUserName
  });
  res.render("users", {
    allUsers: usersArray,
    title: "Users List"
  });
};

到目前为止我一直在尝试什么:

describe("addUsers", () => {
  it("should make sure a user can be added to the array", () => {
    var usersArray = {
      name: "blake",
      grade: ["a", "a", "b", "d"]
    };
    expect(router.addUsers(usersArray)).to.deep.include({
      name: "blake",
      grade: ["a", "a", "b", "d"]
    });
  });

  it("should return an empty object with empty request body input", () => {
    var emptyBody = {};
    expect(router.addUsers(emptyBody)).to.deep.include({});
  });
});

我收到一个“名称”未定义的错误。这可能是因为 req,res 或 res.render 吗?

【问题讨论】:

  • 你能分享完整的错误跟踪吗?
  • @KarthickRam 1) addUsers should make sure a user can be added to the array: TypeError: Cannot read property 'name' of undefined
  • 您将 userArray 对象传递给函数,“req.body.name”肯定会抛出错误,因为您还没有定义 body。将 userArray 对象包裹在 body 中,然后传递给函数。

标签: javascript node.js routes mocha.js chai


【解决方案1】:
    expect(router.addUsers(usersArray)).to.deep.include({
      name: "blake",
      grade: ["a", "a", "b", "d"]
    });

您的函数返回未定义,但在这里您正在检查返回值是否包含名称。这就是为什么它说名称未定义。

你想要类似下面的东西,你可以使用某种包来更恰当地模拟请求和响应对象。

const fakeReq = { body: { name: 'something', grade: 'somethingElse' }},
  fakeRes = { render: () => {}};

await router.addUsers(fakeReq, fakeRes);

expect(usersArray).to.deep.include({ name: 'something' });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多