@[TOC](3、单元测试中桩的引用
一、发现问题
1. 在注册新会员界面,
打开source-->source-->172.16.200.128-->ecshop-->js-->user.js; ctrl+f,查checkEmail();
当email变量不为空时,该函数会调用Utils.isEmail()函数(Util是js文件,isEmail是该文件中的一个函数)
例一:
>checkEmail("[email protected]"); //该邮箱是合法有效的
回显undefined, 前台界面上显示邮箱已存在请重新输入
例二:
>checkEmail(“skinapi”); //该邮箱不是合法有效的
回显false, 前台界面上显示邮箱地址不合法
2.当checkEmail()函数通过不了时,如何判定是isEmail()函数没通过,还是checkEmail()函数本身没通过
在注册新会员界面,打开source–>source–>172.16.200.128–>ecshop–>js–>utils.js; ctrl+f,查isEmail();
可以看到该函数,将该函数复制一份到记事本,将该函数返回值设为true,在console控制台输入:
>Utils.isEmail = function( email )
>{ return true;
> }
>checkEmail(“skinapi”);
回显:undefined,在注册界面,Email空栏后是:可以注册
因为skinapi不是合法邮箱,应该回显false,
二、解决问题
1.初次尝试,找出出问题的部分
注册页面刷新一下,在console控制台输入:
例二:
>if(checkEmail("skinapi") == false)
> alert("testcase 001 pass!");
> else
> ("testcase 001 fall!");
回显:testcase 001 pass!
例三:再来执行一下
>Utils.isEmail = function( email )
>{ return true;
> }
>if(checkEmail("skinapi") == false)
> alert("testcase 001 pass!");
> else
> ("testcase 001 fall!");
回显:undefined,在注册界面,Email空栏后是:可以注册
由例二、例三对比可得出以下结论:
>Utils.isEmail = function( email )
>{ return true;
> }
这一部分有问题,
2.处理有问题的那一部分
将要测试的函数中的子函数设定为完全是正确的,然后再测试函数就可以测试出函数的正确与否
注册页面刷新一下,在console控制台输入:
例一:
Utils.isEmail = function( email )
{ if(email == “skinapi”)
retuen false;
return true;
}
if(checkEmail(“skinapi”) == false)
alert(“testcase 001 pass!”);
else
(“testcase 001 fall!”);
回显: 在注册界面,出现一个小框内容是:testcase 001 pass!
回显正确,因为在Utils.isEmail函数中,将所收到的数据进行了正确的判断处理,该函数返回一个完全正确的结果,该函数不会影响到checkEmail的测试,
所以如果上面代码出问题,一定是checkEmail的问题
例二:
>Utils.isEmail = function( email )
>{ if(email == "[email protected]")
retuen true;
return false;
> }
>if(checkEmail("[email protected]") == false)
> alert("testcase 001 fall!");
> else
> ("testcase 001 pass!");
三、总结
将子函数替换为完全正确的一个函数,如例二前五行所示。这五行对isEmail()函数的重写叫做“桩”
shift+"空格"将输入法切换到全角模式就可以正常输入空格