我正在对一个有角度的应用进行单元测试,而且我是新手。
在我的控制器中,我有基于$ routeParams.templateID
的if语句在我的Jasmine测试中,我尝试将$ routeParam.templateID设置为"否则如果"和"否则"在我的控制器中的if语句的一部分,但在我的控制器中,我从来没有达到声明的那些部分。
控制器部件:
if($routeParams.templateID === undefined) {
...
else if($routeParams.templateID === "new") {
... Never get here in my code coverage
else {
... here neither
测试:
describe("TemplateController tests", function() {
var $scope, $location, $rootScope, $window, controller, $httpBackend, $http, $routeParams;
beforeEach(module("MyApp"));
beforeEach(inject(function($injector, $controller) {
$httpBackend = $injector.get('$httpBackend');
$location = $injector.get('$location');
$http = $injector.get('$http');
$rootScope = $injector.get('$rootScope');
$window = $injector.get('$window');
$scope = $rootScope.$new();
$window.sessionStorage.token = "xxx"
$routeParams = $injector.get('$routeParams');
controller = $controller("TemplateController", {
"$scope": $scope
});
}));
it("Should be able to get evaluations for course", function(){
$routeParams.templateID = undefined;
var evaluationTemplates = [
{
"ID": 1
},
{
"ID": 2
}
];
$httpBackend.when('GET', 'http://localhost:1935/templates').respond(evaluationTemplates);
$httpBackend.expectGET('http://localhost:1935/templates');
$httpBackend.flush();
})
it("Should be able to get a specific evaluation", function(){
$routeParams.templateID = "new"; // this never happenes
expect($scope.view).toBeFalsy();
})
});
答案 0 :(得分:1)
AngularJS没有针对$ routeParams的任何特殊模拟,但是从那以后 那些参数只是一张地图,我们真的不需要专门的模拟。 你可以做的就是将一个普通的旧JS对象注入你的 控制器,像这样:
ctrl = $controller('MyAppCtrl', {
$scope: scope,
$routeParams : routeParams
});
这是完整的jsFiddle: http://jsfiddle.net/pkozlowski_opensource/rKS5E/5/
我找到了答案here