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
Unit testing 茉莉花间谍不工作_Unit Testing_Jasmine_Karma Jasmine - Fatal编程技术网

Unit testing 茉莉花间谍不工作

Unit testing 茉莉花间谍不工作,unit-testing,jasmine,karma-jasmine,Unit Testing,Jasmine,Karma Jasmine,我是Jasmine的新手,我必须测试几个函数调用: JS代码 object1={ 函数1:函数(){ //object1.function2是一个回调函数 object2.someFunction(“已调用”,object1.function2) }, 函数2:函数(){ //代码做的东西 } } 测试代码 description(“测试套件”,函数(){ 它(“test1”,function(){ 间谍(目标1,“功能2”); object1.function1(); expect(obje

我是Jasmine的新手,我必须测试几个函数调用:

JS代码

object1={
函数1:函数(){
//object1.function2是一个回调函数
object2.someFunction(“已调用”,object1.function2)
},
函数2:函数(){
//代码做的东西
}
}
测试代码

description(“测试套件”,函数(){
它(“test1”,function(){
间谍(目标1,“功能2”);
object1.function1();
expect(object1.function2).toHaveBeenCalled();
});
});

我尝试过上面的方法,但失败了,并说“预期间谍功能2已被调用”。有人能帮我解决这个问题吗?谢谢

您可以按如下方式重写测试

description(“测试套件”,函数(){
它(“test1”,函数(done){
间谍(目标1,“功能2”);
object1.function1();
setTimeout(函数(){
expect(object1.function2).toHaveBeenCalled();
完成();
});
});
});

测试代码需要进行异步测试,因为回调永远不会立即被调用。您可以添加另一个异步调用,该调用将放置在调用堆栈中的
object1.function2
之后,当执行
setTimeout
中的函数时,它将已经调用了
object1.function2
,一旦断言完成,您就可以通过调用
done()来结束异步测试

您是否有一个单元测试来证明object2.someFunction最终调用回调?单元测试应该测试单元。因此,您应该测试object2.someFunction是否调用了它所传递的回调,然后编写一个测试来验证function1是否调用了object2.someFunction。当然,要实现这一点,您需要将object2作为参数传递给object1,或者传递给function()或object1构造函数。(依赖项注入)@DaveBush object2是一个全局对象,因此不应该存在依赖项注入问题,我非常确定object2.someFunction会调用回调。不过,如果您能告诉我如何测试它,那将很有帮助。@DaveBush谢谢,我注意到object2.someFunction不调用回调。我认为我使用spyOn的方式出了问题。回调是异步的吗?@BorisCharpentier是的,object2.someFunction包含一个ajax调用。