当前位置: 首页 > 面试题库 >

如何使用$ location服务对angularjs控制器进行单元测试

长孙德惠
2023-03-14
问题内容

我正在尝试创建一个简单的单元测试来测试我的表演功能。

我收到以下错误:

TypeError: Object #<Object> has no method 'show'

看来这$rootScope不是控制器的范围吗?

这是我的控制器:

function OpponentsCtrl($scope, $location) {
    $scope.show = function(url) {
        $location.path(url);
    }
}
OpponentsCtrl.$inject = ['$scope', '$location'];

这是我的控制器单元测试:

describe('OpponentsCtrl', function() {
    beforeEach(module(function($provide) {
        $provide.factory('OpponentsCtrl', function($location){
            // whatever it does...
        });
    }));

    it('should change location when setting it via show function', inject(function($location, $rootScope, OpponentsCtrl) {
        $location.path('/new/path');
        $rootScope.$apply();
        expect($location.path()).toBe('/new/path');

        $rootScope.show('/test');
        expect($location.path()).toBe('/test');
    }));
});

问题答案:

为什么不简单地使用spyOn函数?

describe('OpponentsCtrl', function() {

    var location;

    beforeEach(module(function($provide) {
        $provide.factory('OpponentsCtrl', function($location){
            location = $location;
        });
    }));

    it('should change location when setting it via show function', inject(function() {    
        spyOn(location, 'path');    
        expect(location.path).toHaveBeenCalledWith('/new/path');
    }));
});

希望这可以帮助!



 类似资料:
  • 问题内容: 对于我一生,我无法让$ httpBackend在执行$ http get请求的控制器上工作。我已经尝试了几个小时=) 我将其简化为下面可以最简单的形式。如果我通过测试 在控制器中注释掉$ http.get()请求 在测试中注释掉“ httpMock.flush()” 并更改“猪”和“狗”以匹配 也就是说,这是一个有效的工作测试和应用程序。 如果放回去,则会在底部显示错误。 app /

  • 问题内容: 我有一个与此类似的简单带注释的控制器: 我想用这样的单元测试来测试它: 问题是AnnotationMethodHandlerAdapter.handler()方法引发异常: 问题答案: 从Spring 3.2开始,有一种适当的方法可以轻松,优雅地进行测试。您将可以执行以下操作: 有关更多信息,请访问http://blog.springsource.org/2012/11/12/spri

  • 我对使用Spring控制器进行单元测试的概念是新的。我正在遵循我在网上找到的一些示例,并尝试实现他们的测试策略。这是我的基本控制器: 这是我的单元测试: 看起来很简单,但我得到了以下错误: 它完成了这项工作,但它没有像我之前尝试的那样使用任何Spring注释…这种方法是不好的,所以试图弄清楚为什么每当我在测试文件中包含注释时,总是会出现错误。 我的POM:

  • 好的,我试过了。但我不能把我的头缠在这上面。 我有控制器 Svc是ExtController抽象类中的服务类型的公共属性,它反过来扩展Controller类 下面是使用NUnit的单元测试代码 问题是,当调用Create方法时,它需要使用Svc来处理操作,所以我想我必须嘲笑它!但我不知道怎么做。 我应该嘲笑控制器吗!但我不能,因为它是一个密封的类!或者是ExtController!我迷路了,需要指

  • 我有一个请求表单的映射: 现在我想用MockMvcBuilders为此编写一个测试。不过,我不能这样做。 这里的挑战是请求处理程序需要使用Multipart/form-data,它由4个Multipart Files和1个Json数据组成。 有没有办法解决这个问题?请记住,我必须使用Spring 4.3。 如果您需要更多信息,请告诉我。

  • 问题内容: 编辑:本文末尾的“快速与肮脏”解决方案 我使用的是AngularUI-Bootstrap中的模式窗口,其方式与网站上说明的相同,只是我分割了文件。因此,我有: CallingController.js: modalController.js: 当我使用Karma测试此代码(在karma配置文件中加载了 ui-bootstrap-tpls.min.js 文件)时,出现以下错误: 错误:[