当前位置: 首页 > 后端技术 > Node.js

我的前端集成测试(一)——知乎node的assert模块

时间:2023-04-03 23:41:27 Node.js

FEATFrontEndAutomatesTest前端全自动化测试序幕文章开篇在知乎问答:如何进行前端自动化测试?相信做过前端的朋友都有这个疑问。希望你能在这篇文章中看到一些其他人的测试方法,帮助你更好的测试;尴尬的是我之前的开发测试没有单元测试而是人体测试,对不起我自己??;为了以后更好的开展测试工作,把自己测试学习的过程记录下来,希望对自己和他人有所帮助。做测试时,我们应该从哪里开始呢?测试的两个要素。程序:我们平时写的代码。测试用例:测试你的代码输入输出是否符合预期。一个简单的测试。如果有这样一个两个数相加的程序函数:functionadd(a,b){returna+b}现在我们要测试这个两个数相加的程序函数,测试这个add方法的输入输出是否满足我们的要求期望,所以我们需要写一个测试用例来测试。那么我们的测试用例怎么写方法一:可以这样写5===add(2,3)//测试用例(1)(1.7976931348623157e+308*2)!==add(1.7976931348623157e+308,1.7976931348623157e+308+1)//测试用例(2)测试用例(1)比较预期的5和add方法输入的2、3的输出是否相等;如果相等,则add方法通过测试用例,如果不相等,则证明我们的add方法有问题。可以看出测试用例(1)的结果是相等的,而测试用例(2)使用预期的1079654173767686669和add方法输入1.7976931348623157e+308和1.7976931348623157e+308的输出结果执行与测试用例(1)相同的操作。可以看出测试用例(2)的结果应该是不相等的,测试失败的原因:原来是我们没有考虑大数相加的结果溢出,所以我们的add方法只能当相加的结果不会溢出时使用得到想要的正确结果。我们需要对我们的方法进行修改以适应大数的相加,所以每次修改这个方法,我们都要执行一次上面的测试用例。这样我们就可以进行我们的测试工作了。处理简单的需求显然已经足够了,但实际上,任何人都不应该这样写测试用例。你会使用nodejs提供的assert模块或者shouldjs等断言库来帮助我们进行断言;而这些模块是node原生支持的,后面我们会在这个测试的基础上进行自动化测试,生成测试报告等,都很方便。下一节我们将以assert模块为例,对这个测试用例进行改造;在本节中,我们将先做一些准备工作。编写测试用例,都会用到断言,那么本节我们先来看一下断言的相关内容,以node的Assert模块为例:Assert模块assert模块提供断言测试函数,用于测试不变量。assert.AssertionErrorError的子类,指示断言失败。assert模块抛出的所有错误都是AssertionError类的实例。这是我们在编写测试用例、执行测试、调试测试过程时最常看到的类,表示遇到了断言失败。断言构造函数assert(value[,message])assert.ok()的别名。assert.deepEqual(actual,expected[,message])已弃用:assert.deepStrictEqual()的别名。deepStrictEqualassert.deepStrictEqual(actual,expected[,message])测试实际参数是否深度等于预期参数。深度相等意味着子对象中可枚举的自身属性也根据以下规则递归比较。assert.deepStrictEqual({a:1},{a:1});//这个测??试可以通过注意:脚本中的两者不是绝对相等的等待块的承诺履行,如果块是一个函数,立即调用函数并等待返回的承诺履行,然后检查承诺是否被拒绝。如果block是一个同步抛出错误的函数,assert.doesNotReject()返回一个拒绝并传递错误的Promise。如果该函数没有返回一个承诺,assert.doesNotReject()返回一个被拒绝的带有ERR_INVALID_RETURN_VALUE的承诺。在上述两种情况下,都会跳过错误处理函数。doesNotThrowassert.doesNotThrow(block,error)断言block函数不会抛出错误。当调用assert.doesNotThrow()时,它会立即调用block函数。如果抛出错误并且错误类型与错误参数指定的相同,则会抛出AssertionError。如果错误类型不同,或者错误参数未定义,则会抛出错误。assert.equal(actual,expected[,message])已弃用:assert.strictEqual()的别名。failassert.fail([message])使用提供的或默认的错误消息抛出AssertionError。如果消息参数是Error的一个实例,它将被抛出而不是AssertionError。assert.fail(actual,expected[,message[,operator[,stackStartFunction]]])已弃用:改为使用assert.fail([message])。ifErrorassert.ifError(value)如果value不是undefined或null,则抛出value。可用于测试回调函数的错误参数。堆栈跟踪将包含传递给ifError()的所有错误帧,包括ifError()本身添加的潜在新帧。assert.notDeepEqual(actual,expected[,message])已弃用:改用assert.notDeepStrictEqual()。notDeepStrictEqualassert.notDeepStrictEqual(actual,expected[,message])测试实际参数和预期参数是否不深度一致。与assert.deepStrictEqual()相反。附言assert.notStrictEqual()的别名。assert.notEqual(actual,expected[,message])已弃用:改用assert.notStrictEqual()。notStrictEqualasert.notStrictEqual(actual,expected[,message])使用SameValue比较测试实际参数是否不等于预期参数。okassert.ok(value[,message])测试值是否为真。等同于assert.equal(!!value,true,message)。rejectsassert.rejects(block,error)等待block的promise完成,如果block是一个函数,则立即调用该函数并等待返回的promise完成,然后检查promise是否被拒绝。如果block是一个同步抛出错误的函数,assert.rejects()返回一个拒绝并传递错误的Promise。如果该函数不返回一个承诺,assert.rejects()返回一个被拒绝的承诺ERR_INVALID_RETURN_VALUE。在上述两种情况下,都会跳过错误处理函数。strictEqualassert.strictEqual(actual,expected[,message])使用SameValue比较测试实际参数与预期参数是否相等。throwsassert.throws(block,error)断言块函数将抛出错误。至此,我们就清楚了assert模块的所有API。当然node官网对于Assert模块有更详细的内容。