Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为我的代码编写测试用例_Javascript_Unit Testing_Testing_Jasmine - Fatal编程技术网

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规范运行程序