javascript - 如何使用 mocha/chai 测试 ejs/nodejs 功能?
问题描述
我在需要测试的 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 吗?
解决方案
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' });
推荐阅读
- authentication - 如何在访问 Google App 的多个服务之间共享凭据
- vba - 如何将空白转换为制表符
- sas - SAS:IF 语句中的通配符
- javascript - 单击按钮本身不会播放视频
- autodesk-forge - 无法为 Autodesk BIM 360 docs 项目创建 webhook
- angularjs - 未在 ui-view 中加载的部分 html 之一
- docker - Spring Boot Docker com.netflix.discovery.shared.transport.TransportException:无法在任何已知服务器上执行请求
- text - 与 gedit 中的文本选择进行比较
- javascript - 从javascript数组变量设置元素oninput
- php - Htaccess 错误 404 子目录