如何在每次测试中更改$ rourParam?

时间:2014-03-19 01:00:20

标签: angularjs unit-testing jasmine

我正在对一个有角度的应用进行单元测试,而且我是新手。

在我的控制器中,我有基于$ 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();
    })
});

1 个答案:

答案 0 :(得分:1)

AngularJS没有针对$ routeParams的任何特殊模拟,但是从那以后 那些参数只是一张地图,我们真的不需要专门的模拟。 你可以做的就是将一个普通的旧JS对象注入你的 控制器,像这样:

ctrl = $controller('MyAppCtrl', { 
            $scope: scope, 
            $routeParams : routeParams 
        }); 

这是完整的jsFiddle: http://jsfiddle.net/pkozlowski_opensource/rKS5E/5/

我找到了答案here