如何使用TDD对此功能进行单元测试?

时间:2017-09-15 05:49:10

标签: javascript tdd jestjs

我是单元测试和TDD方法的新手,所以请你帮我。

function calculate(a, b) {
    var sum = a + b;
    var sub = a - b;
    return { sum: sum, sub: sub };
}

3 个答案:

答案 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和单元测试相比,这是一种非常不同的方法,但特别是对于这种功能,它可能是一个非常有效的额外操作。