我是单元测试的新手,在阅读文档后,我仍然对如何检查异步方法感到困惑,据我所知,我需要使用 running() 和 wait()。但是,我可以使用 spy On 来检查该方法是否已被调用,而不是这样做。
这是我要测试的代码
$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 的一部分。
非常感谢帮助和建议
最佳答案
单元测试一开始可能会有点困惑。有一些有助于单元测试的原则。
目的单一。一个组件应该只做一件事。考虑将代码分成更小的部分。将逻辑从 Controller 移至工厂或服务中。这些可以单独测试。
控制反转。 Angularjs 在提供内置 IoC 方面做得很好。将依赖项作为 stub 、伪造品或模拟传递到您的单元中。
仅测试接口(interface)。测试单元的内部调用结构是一种不好的做法。这最终不是测试功能,而是测试实现。相反,想想这个例子。
您有一个 Controller ,它获取传入的名为 nameService 的休息服务。这个 Controller 有一个名为submit(first,last)的方法,当调用该方法时,应该调用nameService上的post(args)方法。
这将允许您创建 nameService 的 stub ,在 post() 方法上创建一个 spy 并将 stub 传递给我们正在测试的 Controller 。然后你可以简单地在 Controller 上调用submit()并测试它是否调用了服务。
本质上,您测试的是如果您将某些内容输入到您的单元中,您的单元将按预期输出它。
关于javascript - 如何检查方法是否已被调用 Jasmine 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251882/