我目前正在学习Jest,Enzyme,Detox和常规测试,但是我仍在尝试从这些库中把握断言在测试中的特定好处。据我了解,断言是关于建立假设情况的。假设将假设参数传递给组件时,预期结果与实际结果是什么?例如,Jest甚至可以通过模拟函数,类,模块和API调用来创建这些假设情况。
我会理解,如果断言可以运行所有可能的假设场景,而无需我单独列出所有断言,那么创建一个测试就很有意义。例如,如果我想测试一个功能:
test('the data is peanut butter', done => {
function callback(data) {
try {
expect(data).toBe('peanut butter');
done();
} catch (error) {
done(error);
}
}
fetchData(callback);
});
我必须自己列出多个假设结果,例如“花生酱,草莓酱,黄油等”,以查看它们是否都返回了预期结果。我不确定这与我只运行实际代码并找出结果或错误或自己创建任意参数并传递它们有何不同。如果我不希望使用该API,则可以创建一个开发服务器。另外,TypeScript和esLint之类的工具在初始编码和重构期间会提供一些保护,前提是它们未提供功能和组件的预期行为。
我看过教程中的文档和示例,但是我仍然没有找到一个真实的测试示例,仅通过运行代码就无法做到。该应用程序可以导航到另一个屏幕吗?模态是否打开?事件发生时组件是否可见?与简单地运行代码相比,我无法理解在这些工具上运行测试的好处。我想念什么?
我不确定这与我只运行实际代码并找出结果或错误或自己创建任意参数并传递它们有什么不同。
开发人员的工作是使计算机完成重复的工作。
测试是自动的,一致的,快速的,可重复的,并且可以由任何人或任何人运行。
您运行要记住的任何测试,而没有时间手动进行。即使您以某种方式完美,但只有一个人,您还有更好的事情要做。
这称为regression testing,重新运行现有测试以确保所有旧假设仍然成立。该代码还没有regressed。自动化测试套件将继续建立越来越多的代码覆盖范围,怪异的情况,晦涩的业务逻辑以及个体开发人员不会记住,一开始就不知道或者没有时间重新开发的很多东西。手动运行。
自动化是另一个关键功能。这使其他开发人员可以在开发过程中运行测试。没有对系统细节的深入了解,任何开发人员都可以知道他们的工作没有破坏以前经过测试的任何内容。并且,他们可以这样做[[before浪费别人的时间,通过将带有错误的代码推送到QA,生产或其他开发人员上。
自动化允许在发布过程中运行测试。在合并到分支之前,测试必须通过。在发布之前,测试必须通过。这样可以为所有人,开发人员,质量检查人员和您的用户节省大量时间。它使开发人员更容易参与并提高工作效率。
我必须自己列出多个假设结果,例如“花生酱,草莓酱,黄油等”,以查看它们是否都返回预期结果。
您不必做所有假设的结果。相反,您需要检查问题的类别。例如,一旦您测试了“花生酱”,您可能就不需要测试“杏仁酱”了。但是也许您需要测试“厕所水”是否会导致错误。空字符串呢?零?如果有人去宜家并拿起一些“ MARMELAD APELSIN&FLÄDER”怎么办,您能处理喜欢的人物吗?
this old gag说明了这种通过抛出不同类别的输入来尝试破坏软件的想法。