对于前端开发者来说,在繁琐的开发过程中,代码的质量和稳健性至关重要。而在这个过程中,自动化测试是不可或缺的一部分。
Jest 是一个流行的测试框架,它提供了一套强大的工具来使测试流程自动化,并且可以帮助你发现和解决代码中潜在的问题。其中,Jest 的一个核心功能就是断言(Assertion),它是测试框架中最基本的功能之一。
断言是什么?
“断言”,在计算机编程中指的是一个语句,它用于判断假定的条件是否成立。在自动化测试中,我们需要使用断言来测试代码的行为是否符合预期。
断言通常使用一种特殊的函数来进行书写,函数名通常以“expect”开头,其余部分取决于使用的具体断言方式。例如:
expect(something).toBe(true); expect(something).toEqual(someOtherThing); expect(something).not.toBe(null);
在 Jest 中,我们可以使用很多不同的断言方式来进行测试,包括检查值、检查异步操作,或是检查抛出异常等。
Jest 断言的常用方法
检查基本值
在 Jest 中,我们可以使用多种函数来检查基本值,例如:
test('two plus two is four', () => { expect(2 + 2).toBe(4); expect(2 + 2).not.toBe(5); });
上述代码中, toBe
函数用于检查值相等, not.toBe
函数用于检查值不等。
除了 toBe
和 not.toBe
外,Jest 还提供了一些其他的断言,用于检测在不同情况下所需的结果是否正确,例如:
test('adding positive numbers is not zero', () => { for (let a = 1; a < 10; a++) { for (let b = 1; b < 10; b++) { expect(a + b).not.toBe(0); } } });
检查对象
在测试对象时,我们可以使用 toEqual
函数,例如:
test('object assignment', () => { const data = {one: 1}; data['two'] = 2; expect(data).toEqual({one: 1, two: 2}); });
在此示例中, toEqual
函数会调用 Object.is
来测试 JSON 格式是否相同。
检查浮点数
由于规范限制,浮点数存在一些精度问题,这在测试时可能会导致问题。因此,当检查浮点数时,我们应使用以下函数:
test('adding floating point numbers', () => { const value = 0.1 + 0.2; // 注意:这行代码会被报错! // expect(value).toBe(0.3); expect(value).toBeCloseTo(0.3); });
在此示例中, toBeCloseTo
函数用于检查两个浮点数之间的差值是否小于某个特定阈值。
检查错误
当测试执行时,你可能希望某些代码抛出错误。为了测试这些错误,我们可以使用 toThrow
函数:
-- -------------------- ---- ------- -------- ----------------------- - ----- --- -------------------- ---- --------- - --------------- ------ ---- ------ -- -- - --------- -- ----------------------------------- --------- -- -------------------------------------------- -- --------------------- --------- -- ------------------------------------------- ---- --------- --------- -- -------------------------------------- -------- ---
上述代码中,toThrow
函数可接受一个参数来指定预期的错误类型或错误信息。
总结
Jest 是一款强大的测试框架,它可以使用多种不同的断言方式,来测试不同的情况。我们在测试时,可以使用多种不同的技术和函数,例如检查基本值、检查对象、检查浮点数和检查错误等。
在实际的前端开发中,我们需要根据不同的情况和需求选择不同的断言方式来进行测试。掌握不同的断言技术和方法,可以帮助我们更好地进行自动化测试,更快地发现和解决代码中的问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a88ea448841e989450361c