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 单元测试Ajax调用_Javascript_Unit Testing_Mocha.js_Sinon - Fatal编程技术网

Javascript 单元测试Ajax调用

Javascript 单元测试Ajax调用,javascript,unit-testing,mocha.js,sinon,Javascript,Unit Testing,Mocha.js,Sinon,我需要一些关于单元测试的建议。我用的是摩卡咖啡和西农咖啡 我有一个处理所有ajax请求的httpService模块(由我编写)。正在测试的文件需要httpService模块 我正在对一个函数进行单元测试,该函数调用同一文件中的私有函数,而私有函数又调用httpService.get() 单元测试的最佳方法是什么 我提出的选项包括: 1) 我可以使用sinon FakeXMLHttpRequest来伪造Ajax响应。但是,因为ajax请求是从httpService模块发出的,所以我现在正在测试ht

我需要一些关于单元测试的建议。我用的是摩卡咖啡和西农咖啡

我有一个处理所有ajax请求的httpService模块(由我编写)。正在测试的文件需要httpService模块

我正在对一个函数进行单元测试,该函数调用同一文件中的私有函数,而私有函数又调用httpService.get()

单元测试的最佳方法是什么

我提出的选项包括:

1) 我可以使用sinon FakeXMLHttpRequest来伪造Ajax响应。但是,因为ajax请求是从httpService模块发出的,所以我现在正在测试httpService模块的功能。这不是集成测试吗

2) 我可以要求将httpService模块放入我的单元测试文件中,并存根httpService.get()函数。在我的单元测试中要求一个模块是可以接受的,即使它只是存根函数

其他内容不会从正在测试的文件中公开

还有其他选择吗


提前谢谢

您的选项1走得太远了,这是正确的。单元测试应限于测试当前函数

选项2正在到达那里。。。我需要httpService模块,但随后创建一个sinon spy来监视httpService.get函数

sinon.spy(对象,“方法”)

这样,您就可以简单地检查您的方法是否导致了对http服务的调用

你应该看看这里关于间谍的文件


谢谢您的回复,我真的很感激!。再来一杯。如果httpService.get返回测试文件中使用的一些数据,在本例中,它正在设置视图模型对象,那么我是否应该在调用测试函数后测试视图模型对象是否已更新。在这种情况下,我想我需要使用存根?如果我使用的是BDD,我是否需要测试httpService.get()函数是否已被调用(使用间谍),或者我只是对视图模型对象已被更新的事实感兴趣。很抱歉问了这么多问题!是的,西农。在那种情况下,存根看起来是个不错的选择。您基本上可以告诉存根使用.returns前缀返回什么。