Javascript 有人能提供一个使用jsTestDriver.js的assertException的简单完整示例吗
我有着深厚的C#背景,目前正在通过ASP.NET MVC和Knockout.js和JavaScript学习。我是一个非常基于TDD的人,遇到了一些我似乎正在努力克服的障碍。我已经阅读了许多jsTestDriver的示例,在进行测试之前,这些示例看起来都相当简单 基本上,我试图进行单元测试(结合使用JetBrains WebStorm 5.0.4和JsTestDriver)的是一个简单的断言,即在遇到特定情况时抛出异常。这应该很简单吧 我的实际测试用例在jsTestDriver中看起来是这样的(删除了所有底层基本代码,只是在单元测试函数本身中引发了异常): }) 哪个测试用例断言我的函数抛出异常“InvalidDataSourceException”,不是吗?最初,我尝试使用声明类型的函数: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中看起来是这样的(删
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");