AngularJs 测试(Chai+Karma):一些作用域变量没有更新

AngularJs tests (Chai+Karma): some scope variables are not updated

我有一个控制器设置变量如下:

terminalController.controller('GeneralSettingsController', [ '$rootScope', '$scope', 'GeneralSettingsService', 'getGeneralSettings', 
                   function($rootScope, $scope, GeneralSettingsService, getGeneralSettings) {

    getGeneralSettings.get().$promise.then(function (response) {
        $scope.connectionsettings = response;

        if(response.screenSaverOn == 'true') {
            $scope.screenSaver = 'On';
        } else {
            $scope.screenSaver = 'Off';
        }
     });
}
]);

现在我想测试如果响应有 screenSaverOn == 'true',那么 $scope.screenSaver 将是 'On'

这是我的测试片段:

    describe('GeneralSettingsController', function() {

        var rootScope, getConnectionSettings, resp;


        beforeEach(inject(function($controller,
                $rootScope, _$httpBackend_) {       

            rootScope = $rootScope.$new();
            $httpBackend = _$httpBackend_;
            $controller('GeneralSettingsController', {
                $rootScope : rootScope
            });

            $httpBackend.when('GET', 'ws/Admin/terminal/settings').respond(
                     { response : {
                        "screenSaverOn" : true
                     }
                    });
    }));
it('should call get connection settings when page is loaded', function() {
        $httpBackend.flush();

    assert.equal(rootScope.connectionsettings.response.screenSaverOn, true);
assert.equal(rootScope.screenSaver, 'On');


});

第一个断言成功,第二个断言失败,我做错了什么?

问题是您没有将所需的服务注入到控制器中。它正在调用 getGeneralSettings.get() 但从未注入 getGeneralSettings,因此这应该会导致错误。您只提供了 $rootScope。缺少 $scope、GeneralSettingsService、getGeneralSettings。

您必须提供您自己的模拟对象,该对象可以直接响应您想要的响应。并删除 HTTP 后端模拟,因为您没有使用 $http.