我是单元测试和TDD方法的新手,所以请你帮我。
function calculate(a, b) {
var sum = a + b;
var sub = a - b;
return { sum: sum, sub: sub };
}
答案 0 :(得分:1)
开玩笑,你可以这样做:
describe('calculation', ()=> {
let result
beforEach(()=>{
result = calculate(2, 3)
})
it('returns the correct sum', (){
expect(result.sum).toBe(5)
})
it('returns the correct sub', (){
expect(result.sub).toBe(-1)
})
})
答案 1 :(得分:1)
it('checks calculations', function() {
var calculate = require('./example.js');
expect(calculate(1, -1).sum).toBe(0);
expect(calculate(1, -1).sub).toBe(2);
});
将文件另存为.js并使用npm test。 我假设你正在使用 jestjs 。 您可以根据您对功能的理解添加其他测试条件。
答案 2 :(得分:0)
这里有一个非常不同的答案:测试此类代码手动的巨大问题是,当你编写足够的测试覆盖不同的情况时,很难说清楚。< / p>
此处采用另一种方法:您可以退后一步,找出您所测试的方法应遵守的合同,而不是仅指定预期结果。
然后使用其中一个基于quickcheck的框架,例如JSVerify。您将这些规则提供给该工具 - 然后该工具会创建随机数据并运行测试用例。如果它发现违反合同,它将尝试“最小化”测试输入 - 这样你最终会收到一条消息“当你使用这个数据x,y,z时,则规则A被违反”。
与“普通”TDD和单元测试相比,这是一种非常不同的方法,但特别是对于这种功能,它可能是一个非常有效的额外操作。