Javascript 如何为我的代码编写测试用例
有没有办法为我的代码编写一个测试用例?在使用测试套件进行测试之前,是否需要删除任何内容 我是测试新手,希望知道我可以测试下面的代码Javascript 如何为我的代码编写测试用例,javascript,unit-testing,testing,jasmine,Javascript,Unit Testing,Testing,Jasmine,有没有办法为我的代码编写一个测试用例?在使用测试套件进行测试之前,是否需要删除任何内容 我是测试新手,希望知道我可以测试下面的代码 var hello = "Hello, "; function greet(name){ //Requirement UpperCase function upperCase(){ if (name.toUpperCase() === name) { //uppercase string console.log(hello.toUpperCase() + n
var hello = "Hello, ";
function greet(name){
//Requirement UpperCase
function upperCase(){
if (name.toUpperCase() === name) { //uppercase string
console.log(hello.toUpperCase() + name + '!');
}
else {
console.log(hello + name + ".");
}
}
//Requirement last element
function namesArray(){
if (name.length > 1){
var lastElement = name.pop();
console.log(hello + name + " and " + lastElement + ".");
}
else{
console.log(hello + name + ".");
}
}
//Comparing name//
if (name == null) {
console.log(hello + "my friend.")
}
else if(typeof name === 'string'){//will accept strings and return them.
upperCase();
}
else if (Array.isArray(name)){//will accept arrays and return them.
namesArray();
}
}
greet()
greet("James")
greet("Ruth");
greet(["Barry", "Kate"])
greet(["Kerry", "Mike", "Snake", "FOX"])
你应该先加分号。否则就好了
greet();
greet("James");
greet("Ruth");
greet(["Barry", "Kate"]);
greet(["Kerry", "Mike", "Snake", "FOX"]);
通常,在编写业务需求之前应该编写测试,避免在编写测试时考虑实现 首先,您的实现无法测试,因为您的函数严格依赖于对象控制台。 在期望阶段的某个时候,您将需要一个输出来用作比较器,在您的实现中,这意味着修改从greet函数返回字符串或对象(如
greetResult={message:“Hello,”}
)的代码
现在…试着忘记你的实现细节,把一个需求看作是一个畅销产品 您的客户(Foo先生)不想知道您的代码详细信息,但他希望产品符合要求 因此,问问自己(并对所有要求都这样做): Foo先生何时接受我的产品?-->哪些是验收标准?
greet
函数应返回“你好,我的朋友。”
Foo先生知道,调用greet()
应该会收到“你好,我的朋友。”
在这种情况下,将接受该产品。(在现实世界中并不总是如此)
greet
函数应返回“Hello,+name+”
傅先生知道,打电话给问候(“汤姆”)
应该会收到“你好,汤姆。”
,如果是这样,他将接受该产品。傅先生,这不是一个肤浅的买家,在接受产品之前,他会打电话给
greet(“杰克”)
或greet(“汤姆”)
。Foo先生也是一个狡猾的人,他会打电话给Helen(“TOM”),确认产品不会产生“Hello,TOM.”字符串。
这就是所谓的测试粒度强>
greet
函数应返回“HELLO,+NAME+”!“
等等……通过这种方式,您正在以一种积极的方式测试您的代码,并且您需要覆盖边界情况 这里是茉莉花测试:
//源代码
var=函数(名称){
var hello=“hello,”;
//要求大写
函数大写(){
如果(name.toUpperCase()==name){//大写字符串
返回hello.toUpperCase()+name+'!';
}
否则{
返回hello+name+“;
}
}
//要求最后一个要素
函数名称数组(){
如果(name.length>1){
var lastElement=name.pop();
返回hello+name+”和“+lastElement+”;
}
否则{
返回hello+name+“;
}
}
//比较名称//
if(name==null){
返回hello+“我的朋友。”;
}
else if(typeof name==='string'){
//将接受字符串并返回它们
返回大写();
}
else if(Array.isArray(名称)){
返回namesArray();
}
否则{
抛出新错误(“”);
}
}
//测试代码
描述(“问候”,函数(){
它(“应该返回Hello,我的朋友。当name为null时”,function(){
var-act=greet();
期待(表演)托比(“你好,我的朋友”);
控制台日志(act);
});
它(“应该返回Hello,name.当用小写字母调用时”,function(){
var act=问候(“汤姆”);
托比(“你好,汤姆”);
控制台日志(act);
act=问候(“杰克”);
期待(表演)托比(“你好,杰克”);
act=问候(“汤姆”);
期待(表演)。不。托比(“你好,汤姆”);
});
它(“当使用大写字符串调用时,应该返回HELLO,NAME!”,function(){
var act=问候(“汤姆”);
期待(表演)。托比(“你好,汤姆!”);
控制台日志(act);
act=问候(“杰克”);
期待(表演)。托比(“你好,杰克!”);
act=问候(“汤姆”);
期待(表演)。不要。托比(“你好,汤姆!”);
});
它(“当使用字符串数组调用时,应返回Hello、name和last name”,function()){
var act=问候([“汤姆”,“杰克]);
托比(“你好,汤姆和杰克”);
控制台日志(act);
act=问候([“汤姆”、“杰克”、“朱丽亚]);
托比(“你好,汤姆,杰克和朱利亚。”);
});
它(“使用无效参数调用时应引发异常”,function(){
expect(function(){greet({});}).toThrow();
expect(function(){greet(1);}).toThrow();
var functionArgument=函数(){
//……什么也不做
};
expect(function(){greet(functionArgument);}).toThrow();
//取消注释并覆盖以下情况
//expect(函数(){greet(未定义);}).toThrow();
});
});
//加载jasmine htmlReporter
(功能(){
var env=jasmine.getEnv();
env.addReporter(new jasmine.HtmlReporter());
execute();
}());代码>
Jasmine规范运行程序