Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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/2/unit-testing/4.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 有人能提供一个使用jsTestDriver.js的assertException的简单完整示例吗_Javascript_Unit Testing_Exception Handling_Tdd - Fatal编程技术网

Javascript 有人能提供一个使用jsTestDriver.js的assertException的简单完整示例吗

Javascript 有人能提供一个使用jsTestDriver.js的assertException的简单完整示例吗,javascript,unit-testing,exception-handling,tdd,Javascript,Unit Testing,Exception Handling,Tdd,我有着深厚的C#背景,目前正在通过ASP.NET MVC和Knockout.js和JavaScript学习。我是一个非常基于TDD的人,遇到了一些我似乎正在努力克服的障碍。我已经阅读了许多jsTestDriver的示例,在进行测试之前,这些示例看起来都相当简单 基本上,我试图进行单元测试(结合使用JetBrains WebStorm 5.0.4和JsTestDriver)的是一个简单的断言,即在遇到特定情况时抛出异常。这应该很简单吧 我的实际测试用例在jsTestDriver中看起来是这样的(删

我有着深厚的C#背景,目前正在通过ASP.NET MVC和Knockout.js和JavaScript学习。我是一个非常基于TDD的人,遇到了一些我似乎正在努力克服的障碍。我已经阅读了许多jsTestDriver的示例,在进行测试之前,这些示例看起来都相当简单

基本上,我试图进行单元测试(结合使用JetBrains WebStorm 5.0.4和JsTestDriver)的是一个简单的断言,即在遇到特定情况时抛出异常。这应该很简单吧

我的实际测试用例在jsTestDriver中看起来是这样的(删除了所有底层基本代码,只是在单元测试函数本身中引发了异常):

})

哪个测试用例断言我的函数抛出异常“InvalidDataSourceException”,不是吗?最初,我尝试使用声明类型的函数:

function InvalidDataSourceException (){}

GridControllerTest.prototype.testBasicExceptionType = function () {

assertException(function() {
    throw new InvalidDataSourceException();
}, "InvalidDataSourceException");
})


有谁能告诉我为什么我不能通过这么简单的考试?我是否误解了单元测试函数的结构?

区别在于,在第一个示例中,您抛出了一个字符串,在第二个示例中,您抛出了一个对象。JavaScript中的对象没有与之关联的规范名称,本质上是因为没有类型系统(只有原型)。在第二个示例中,函数被分配给window.InvalidDataSourceException,但函数对象本身没有名称。特别是,没有默认反射来获取名称或等效的toString()来获取规范值


就我个人而言,我完全放弃了使用assertException,因为出于这种原因,它太脆弱了。我开始使用try-catch块。我在try块的末尾放了一个fail()调用,因为预计到时会抛出它,我在catch块中放了另一个测试点,以确保异常如预期的那样。在我看来,这是一种更好的测试模式,因为它将控制更改测试与控制更改测试分离。

区别在于,在第一个示例中,您抛出一个字符串,在第二个示例中,您抛出一个对象。JavaScript中的对象没有与之关联的规范名称,本质上是因为没有类型系统(只有原型)。在第二个示例中,函数被分配给window.InvalidDataSourceException,但函数对象本身没有名称。特别是,没有默认反射来获取名称或等效的toString()来获取规范值


就我个人而言,我完全放弃了使用assertException,因为出于这种原因,它太脆弱了。我开始使用try-catch块。我在try块的末尾放了一个fail()调用,因为预计到时会抛出它,我在catch块中放了另一个测试点,以确保异常如预期的那样。在我看来,这是一种更好的测试模式,因为它将控制变更的测试从控制变更的测试中分离出来。

感谢您对此的回复,我同意您的单元测试方法(try、catch、assert)。这更像是在jsTestDriver中使用assertException方法的练习,但我放弃了它,认为这是一项糟糕的工作。我已经切换到只抛出错误(“出错了”)而不是尝试创建自定义类/函数。感谢您对此的回复,我同意您的单元测试方法(try、catch、assert)。这更像是在jsTestDriver中使用assertException方法的练习,但我放弃了它,认为这是一项糟糕的工作。我已经切换到只抛出错误(“出错”)而不是尝试创建自定义类/函数。
function InvalidDataSourceException (){}

GridControllerTest.prototype.testBasicExceptionType = function () {

assertException(function() {
    throw new InvalidDataSourceException();
}, "InvalidDataSourceException");