javascript - 如何测试简单的布尔函数?
问题描述
我在理解测试方面遇到了一些问题,因为我几乎从不觉得它是必要的。
如果我有简单的功能,比如
function isMovementOutOfBounds(newPosition) {
if (newPosition[0] > input[0][0] || newPosition[0] < 0 || newPosition[1] > input[0][1] || newPosition[1] < 0) {
return true;
}
return false;
}
或者
function isMovementForbidden(forbiddenMovements, initialPosition, newPosition) {
function isArrayInArray(arr, item) {
const item_as_string = JSON.stringify(item);
const contains = arr.some((ele) => JSON.stringify(ele) === item_as_string);
return contains;
}
const newMovement = [initialPosition, newPosition];
if (isArrayInArray(forbiddenMovements, newMovement)) {
return true;
}
return false;
}
他们甚至应该接受测试吗?他们总是有回报,而且总是布尔值。所以我不明白是否真的有必要对其进行测试。
也许我应该测试他们收到的输入类型?
这对我来说似乎很愚蠢,我该如何测试这些功能?知道我应该寻找什么吗?
解决方案
至少
- 测试可帮助您确保您的代码在不同情况下(各种输入,包括边缘情况)的行为符合预期
- 测试可以帮助您维护特定模块和项目其他部分之间的接触点
- 确保在您开发应用程序时,它仍能满足您的基本要求
只是为了给您一个线索,关于您可以执行哪种测试,请查看以下演示(这表明您的代码目前不起作用):
mocha.setup('bdd')
const { expect } = chai
function isMovementForbidden(forbiddenMovements, initialPosition, newPosition) {
function isArrayInArray(arr, item) {
const item_as_string = JSON.stringify(item);
const contains = arr.some((ele) => JSON.stringify(ele) === item_as_string);
return contains;
}
const newMovement = [initialPosition, newPosition];
if (isArrayInArray(forbiddenMovements, newMovement)) {
return true;
}
return false;
}
const testSuite = [
{
descr: 'Should work for basic coordinates',
input: [[[0,0],[1,1]], [2,3], [1,1]],
output: true
},
{
descr: 'Should be able to handle empty array of forbidden movements',
input: [[], [0,0], [1,1]],
output: false
},
{
descr: 'Should be able to allow staying at current point',
input: [[1,1], [0,0], [0,0]],
output: false
}
]
describe('Basic test', ()=>{
testSuite.forEach(({input, output, descr}) =>
it(descr, ()=>{
expect(isMovementForbidden(...input)).to.equal(output)
}))
})
mocha.run()
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/8.0.1/mocha.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"></script><div id="mocha"></div>
推荐阅读
- audio - Javafx 不会播放某个专辑中的 mp3
- wordpress - 如何自定义添加媒体按钮,单击wordpress中的按钮后在弹出窗口中弹出我的自定义html
- python - Python 3 - 浮点变量有问题
- c# - 从模板创建新位图并保留模板位图参数
- javascript - 从网格中过滤掉记录时出错
- javascript - 联系人字段使日期选择器在单击字段中的任何位置时出现
- java - 未找到 IntelliJ 编译错误 zip END 标头
- apache-flink - Flink:在 Flink 作业中处理异常的最佳方法是什么
- docker - Dockerized terraform 和 tfstate
- vuejs2 - 如何使用 Vue.js 从单个文件组件中的方法访问计算属性