Javascript 如何检查方法是否被称为jasmine单元测试
我是单元测试新手,在阅读文档之后,我仍然对如何对异步方法进行检查感到困惑,据我所知,我需要使用runs()和wait()。但是,我可以使用spyOn来检查是否调用了该方法,而不是这样做 这就是我要测试的代码Javascript 如何检查方法是否被称为jasmine单元测试,javascript,angularjs,unit-testing,karma-runner,Javascript,Angularjs,Unit Testing,Karma Runner,我是单元测试新手,在阅读文档之后,我仍然对如何对异步方法进行检查感到困惑,据我所知,我需要使用runs()和wait()。但是,我可以使用spyOn来检查是否调用了该方法,而不是这样做 这就是我要测试的代码 $scope.createMedicalServices = function(){ if($scope.newTreatment.async_selected_treatment.id == null){ $scope.newTreatment.
$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函数实际上是在用户单击submit表单时执行的,它是html文件上ng submit的一部分
非常感谢的帮助和建议单元测试一开始可能会有点混乱。有一些原则有助于单元测试 目的单一。组件应该只做一件事。考虑把代码分解成更小的部分。将逻辑从控制器移到工厂或服务中。这些可以单独测试 控制反转。Angularjs在提供内置IoC方面做得很好。将依赖项作为存根、赝品或仿制品传递到单元中 只测试接口。测试单元的内部调用结构是一种不好的做法。这最终不是测试功能,而是实现。相反,想想这个例子 您有一个名为nameService的控制器,用于获取传入的rest服务。此控制器有一个名为submit(first,last)的方法,调用该方法时,应调用nameService上的方法post(args) 这将允许您创建nameService的存根,在post()方法上创建一个spy,并将存根传递给我们正在测试的控制器。然后,您只需在控制器上调用submit(),并测试它是否调用了服务 本质上,您测试的是,如果您在单元中输入了某些内容,单元将按预期输出它