我是茉莉花测试的新手,我无法对如何对控制器进行单元测试进行全面了解。我的控制器做了一些任务,我基本上想要测试以执行以下操作:
我需要尽可能完整的示例如何编写测试,以及用于模拟方法的声明。
有问题的控制器方法如下所示:
.controller('ProjectConfigurationCtrl', function($scope, $routeParams, InfraService, ProjectConfigurationService) {
// some pre-init...
$scope.clickUpdate = function() {
if ($scope.projectData.Id === 0) {
ProjectConfigurationService.save(angular.toJson($scope.projectData), function(project) {
$scope.projectData = project;
$scope.newproject = false;
$scope.info = "Project " + project.ProjectName + " created successfully.";
}, function() {
$scope.info = "Project " + $scope.projectData.ProjectName + " can not be created: server error.";
});
} else {
ProjectConfigurationService.update(angular.toJson($scope.projectData), function() {
$scope.info = "Project " + $scope.projectData.ProjectName + " updated successfully.";
}, function() {
$scope.info = "Project " + $scope.projectData.ProjectName + " can not be updated: server error.";
});
}
我想查看ProjectConfigurationService.save/update是否被调用一次,并检查作为参数到达这些调用的内容。我想要模拟服务返回信息。在调用之后,我想检查$ scope.newproject,$ scope.info等,看看里面是什么。
答案 0 :(得分:1)
请参阅Angular Unit Testing on Controller using a Service - Breaking on Inject中的答案作为参考茉莉花测试。如果需要,您可以在网上搜索更多示例。
我很高兴看到你对“单元测试”的想法是正确的,所以继续前进。关键是,你必须注入$ controller,它是一个控制器构造函数服务,允许你传递模拟的依赖项。在你的情况下,在你的“它”功能中,你应该有类似的东西:
var projectConfigCtrl = $controller('ProjectConfigurationCtrl', // name of your controller
/* mocked dependencies */ {$scope: <yourMockedScope, usually $rootScope.$new>,
$routeParams: <your mock>,
InfraService: <your mock service>,
ProjectConfigurationService: <your mock service>});