我正在努力了解如何使用Jasmine和Karma对单个应用程序AngularJS进行单元测试。我曾尝试使用Google,但没有取得任何进展,我自己的代码。特别是嘲笑和注入依赖于内置$ http服务的工厂服务。
另外,单元测试控制器和工厂服务或者其中一个就足够了。
我已经上传的代码plunkr并希望得到任何帮助
https://plnkr.co/edit/WBpJ7gUZrNm8LwnCOsnR
factory.main.js
angular.module('hwApp').factory('mainFactory', ['$http', function($http){
return {
getData: function(){
return $http.get('https://jsonplaceholder.typicode.com/posts/1');
}
}
}]);
controller.main.js
angular.module('hwApp').controller('MainCtrl', ['mainFactory', function(mainFactory){
vm = this;
mainFactory.getData().then(function(res){
vm.httpData = res.data;
})
}]);
指数.html
<!DOCTYPE html>
<html ng-app="hwApp">
<head>
<script data-require="[email protected]" data-semver="1.5.0" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
<script src="factory.main.js"></script>
<script src="controller.main.js"></script>
</head>
<body ng-controller="MainCtrl as vm">
<h1>{{vm.httpData.title}}</h1>
</body>
</html>
非常感谢。我的好处很少有问题: - 第8行:系统如何知道您注入的是控制器还是工厂等。想象一下,您有一个名为“main”的控制器和工厂。 - 第20行:mainFactory.getData()<<<<您是否正在调用工厂中定义的实际方法? – user1275105
我的理解是,我正在调用服务方法的模拟。最佳做法是始终使用不同的名称并根据它们的名称,控制器的“mainController”和工厂的“mainService”。坦率地说,我还没有尝试给服务和控制器同名。控制器被嘲笑的方式与服务略有不同。你必须注入$控制器...这是一个体面的演练如何做到这一点:http://nathanleclaire.com/blog/2013/12/13/how-to-unit-test-controllers-in-angularjs-without-setting-your-hair-on -火/ –