如何检查方法是否调用了茉莉花单元测试
how to check if methods have been called jasmine unit test
我是单元测试的新手,在阅读了文档之后,我仍然对如何对异步方法进行检查感到困惑,据我所知,我需要使用runs()和wait()。但是,我可以使用spyOn来检查方法是否被调用。
这是我要测试的代码
$scope.createMedicalServices = function(){
if($scope.newTreatment.async_selected_treatment.id == null){
$scope.newTreatment.description = $scope.newTreatment.description_no_id;
}
else{
$scope.newTreatment.description = $scope.newTreatment.description;
}
$scope.newTreatment.no_cpt_code = $scope.newTreatment.no_cpt_code;
$scope.newTreatment.cash_price = $scope.newTreatment.cash_price_input;
$scope.newTreatment.average_price = $scope.newTreatment.average_price_input;
$scope.newTreatment.service = $scope.newTreatment.async_selected_treatment.service;
var returnPromiseObject;
if ($scope.newTreatment.no_cpt_code) {
returnPromiseObject = ProviderMedicalService.createNew($scope.newTreatment);
}
else if($scope.newTreatment.async_selected_treatment.id == null){
returnPromiseObject = ProviderMedicalService.createNewCPT($scope.newTreatment);
}
else{
returnPromiseObject = ProviderMedicalService.createExisting($scope.newTreatment);
}
returnPromiseObject.then(
function (value){
$scope.newTreatment.id = value.id;
$scope.provider_medical_services.push($scope.newTreatment);
},
function (error){
console.log(error);
});
};
$scope.searchTreatments = function(value){
return Treatment.find(value).then(function(values){
return values;
});
};
,这是我到目前为止写的,但它不是很多,因为我不知道如何测试它。
it('search treament should have been called and return a value'),function(){
scope.searchTreatments();
}
it('it should create medical service after submitting the form'),function(){
scope.createMedicalServices();
runs
}
基本上,如果方法被正确调用,我就满足了,因为createMedicalService函数实际上是在用户单击提交表单时执行的,就像它在html文件上的ng-submit的一部分。
非常感谢您的帮助和建议
单元测试一开始可能会有点令人困惑。有一些原则可以帮助进行单元测试。
目的单一。一个组件应该只做一件事。考虑将代码分成更小的部分。将逻辑从控制器移到工厂或服务中。这些都可以单独测试。
控制反转。Angularjs在提供内置的IoC方面做得很好。将依赖项作为存根、假的或mock传递到单元中。
只测试接口。测试单元的内部调用结构是一种不好的做法。最终测试的不是功能,而是实现。相反,想想这个例子。
你有一个控制器,它获得一个名为nameService的rest服务。这个控制器有一个名为submit(first, last)的方法,当它被调用时,应该调用nameService上的post(args)方法。
这将允许你创建nameService的存根,在post()方法上创建一个间谍,并将存根传递给我们正在测试的控制器。然后,只需在控制器上调用submit(),并测试它是否调用了服务。
本质上,你测试如果你输入一些东西到你的单元,你的单元将会输出它。
相关文章:
- 同步(阻塞)ajax调用是否可以阻塞浏览器'的UI
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- 异步函数调用是否可以在两个同步语句之间完成
- 并行或串行编写多个 AJAX 调用是否更好
- XMLhttpRequest 的问题,不确定调用是否正确
- 确定 .always 函数中的 AJAX 调用是否失败
- 检测所有 XMLHttpRequest 调用是否已完成
- 检查函数调用是否具有正确的参数类型
- 如果没有jQuery,javascript如何检查多个ajax调用是否已经完成,一旦完成,就执行一段代码
- 检查构造函数调用是否来自扩展类
- AJAX调用是否有返回HTML内容和回调函数的方法
- requestAnimationFrame调用是否总是被抑制到60 FPS.只要屏幕准备重新绘制,就会调用
- 如何检查函数调用是否有参数
- 如何判断$(".").each()调用是否过早中止?
- 如何检测调用是否通过jQuery进行
- 如何检查ajax .load调用是否已加载
- $scope.$apply()调用是否适用于此场景?
- 检查函数调用是否为变量定义
- 检查ajax调用是否完成
- 如何检查ajax调用是否已完成以及何时完成