如何编写Karma测试以查看Angular中的控制器是否正在调用工厂函数?

耶利丹

我正在学习使用Karma和Jasmine在Angular中进行单元测试,并试图确定如何正确模拟工厂并测试它是否被控制器调用。工厂从ESPN API发出一个简单的http请求。当控制器调用它时,它将响应数据传递到数组。到目前为止,我所基于的是:Angular单元测试控制器-controller内部的模拟服务不幸的是,我似乎无法正确地做到这一点。

这是我的控制器和工厂的外观:

angular.module('TeamApp.services',[])
.factory('espnAPIservice',function($http) {
        var espnAPI = {};
        espnAPI.getTeams = function() {
            return $http({
                method: 'GET',
                url: 'http://api.espn.com/v1/sports/hockey/nhl/teams?'
            })
        }
        return espnAPI;
    });

//Calls the espnAPIservice and stores the retrieved information in an array
angular.module('TeamApp.controllers',[])
.controller('TeamCtrl', ['$scope','espnAPIservice',function($scope,espnAPIservice) {
        $scope.teams = [];

        espnAPIservice.getTeams().success(function (response) {
            $scope.teams = response;
        });
    }]);

angular.module('TeamApp',['TeamApp.services','TeamApp.controllers']);

到目前为止,这是我的测试:

describe('controller: TeamCtrl', function() {
    var $scope, ctrl;

    //Inject controller module into the factory that it the controller will call
    beforeEach(module('TeamApp.controllers', function($provide) {
        var espnAPIservice = {
            getTeams: function(){}
        };
        spyOn(espnAPIservice,'getTeams').andReturn('ESPN'); //change return value
        $provide.value('espnAPIservice',espnAPIservice);
    }));

    //Inject the $controller and $rootScope services
    beforeEach(inject(function($rootScope, $controller, espnAPIservice) {
        //Create a new scope that is the child of $rootScope
        $scope = $rootScope.$new();
        //Create the controller
        ctrl = $controller('TeamCtrl',{$scope: $scope, espnAPIservice: espnAPIservice});
    }));

    it('should call the getTeams function', function(){
        expect($scope.teams).toBe('ESPN');
    });

这是我运行测试时遇到的错误:

PhantomJS 1.9.7(Windows 7)控制器:TeamCtrl应该调用getTeams函数FAILED

TypeError:“未定义”不是函数(评估'espnAPIservice.getTeams()。success(function(response){
$ scope.teams = response;})')

在c:/ Users / jquering / Documents / Coding Practice / Angular Practice / nhlStats / app / scripts / teams.js:21
在调用时(c:/ Users / jquering / Documents / Coding Practice / Angular Practice / nhlStats / app / lib /angular.js:3762)
实例化(c:/ Users / jquering / Documents / Coding Practice / Angular Practice / nhlStats / app / lib / angular.js:3773)实例化
于c:/ Users / jquering / Documents / Coding Practice / Angular Practice / nhlStats / app / lib / angular.js:6884
at c:/ Users / jquering / Documents / Coding Practice / Angular Practice / nhlStats / test / controllers / spec / main.js:18
在调用时(c:/ Users / jquering / Documents / Coding Practice / Angular Practice / nhlStats / app / lib / angular.js:3762)
在workFn(c:/ Users / jquering / Documents / Coding Practice / Angular Practice / nhlStats / app / lib / angular-mocks .js:2144)

未定义
预期[]为'ESPN'。
PhantomJS 1.9.7(Windows 7):执行1 of 1(1 FAILED)错误(0.009秒/ 0.008秒)

任何帮助将非常感激!

斯蒂芬·苏沃洛夫(Stepan Suvorov)

如何正确模拟工厂

beforeEach(module(function ($provide){
    $provide.factory('TheSameName', function (){
      //return your mock here
    });
}));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何对控制器中的函数进行单元测试(使用Jasmine),该函数调用工厂服务并返回承诺

来自分类Dev

如何编写rspec测试以测试控制器中是否有可用的辅助方法?

来自分类Dev

如何测试控制器中是否正在调用方法?

来自分类Dev

从Karma和Jasmine测试中调用控制器函数

来自分类Dev

如何从AngularJS中的控制器调用工厂/服务?错误:组件$ injector中的未知提供程序错误

来自分类Dev

Angular.js:在同一控制器上两次调用工厂

来自分类Dev

AngularJs - 在控制器中使用工厂函数

来自分类Dev

使用工厂创建控制器

来自分类Dev

在Karma中测试角度控制器

来自分类Dev

如何在Angular JS中为控制器编写测试用例

来自分类Dev

测试是否在视图控制器方法中调用performSegueWithIdentifier

来自分类Dev

如何测试调用私有函数的控制器函数,该私有函数又依次调用angularjs中的异步函数

来自分类Dev

如何为依赖工厂服务的控制器编写单元测试,而工厂服务本身取决于$ http服务

来自分类Dev

如何在单个控制器中创建全局变量并在Angularjs的工厂内部调用函数

来自分类Dev

Angular JS:如何在Angular指令中从控制器的链接内部调用函数

来自分类Dev

Angular JS:如何在Angular指令中从控制器的链接内部调用函数

来自分类Dev

控制器从工厂收到未定义的调用函数

来自分类Dev

如何在Ajax调用中在控制器外部调用Angularjs控制器函数

来自分类Dev

从指令中调用Angular控制器函数

来自分类Dev

控制器中的Angular.js调用指令函数

来自分类Dev

在Angular中创建后立即调用控制器函数

来自分类Dev

在Angular中创建后立即调用控制器函数

来自分类Dev

angular:调用控制器函数中的重复项

来自分类Dev

如何从MVC中的另一个控制器调用在一个控制器中编写的函数

来自分类Dev

如何从服务中调用控制器中的函数

来自分类Dev

如何从页面中的jQuery调用Angular JS函数控制器

来自分类Dev

使用Karma和Jasmine在Angular JS中测试父控制器范围的变量

来自分类Dev

如何在codeigniter的控制器中调用javascript函数?

来自分类Dev

如何从外部控制器的指令中调用函数?

Related 相关文章

  1. 1

    如何对控制器中的函数进行单元测试(使用Jasmine),该函数调用工厂服务并返回承诺

  2. 2

    如何编写rspec测试以测试控制器中是否有可用的辅助方法?

  3. 3

    如何测试控制器中是否正在调用方法?

  4. 4

    从Karma和Jasmine测试中调用控制器函数

  5. 5

    如何从AngularJS中的控制器调用工厂/服务?错误:组件$ injector中的未知提供程序错误

  6. 6

    Angular.js:在同一控制器上两次调用工厂

  7. 7

    AngularJs - 在控制器中使用工厂函数

  8. 8

    使用工厂创建控制器

  9. 9

    在Karma中测试角度控制器

  10. 10

    如何在Angular JS中为控制器编写测试用例

  11. 11

    测试是否在视图控制器方法中调用performSegueWithIdentifier

  12. 12

    如何测试调用私有函数的控制器函数,该私有函数又依次调用angularjs中的异步函数

  13. 13

    如何为依赖工厂服务的控制器编写单元测试,而工厂服务本身取决于$ http服务

  14. 14

    如何在单个控制器中创建全局变量并在Angularjs的工厂内部调用函数

  15. 15

    Angular JS:如何在Angular指令中从控制器的链接内部调用函数

  16. 16

    Angular JS:如何在Angular指令中从控制器的链接内部调用函数

  17. 17

    控制器从工厂收到未定义的调用函数

  18. 18

    如何在Ajax调用中在控制器外部调用Angularjs控制器函数

  19. 19

    从指令中调用Angular控制器函数

  20. 20

    控制器中的Angular.js调用指令函数

  21. 21

    在Angular中创建后立即调用控制器函数

  22. 22

    在Angular中创建后立即调用控制器函数

  23. 23

    angular:调用控制器函数中的重复项

  24. 24

    如何从MVC中的另一个控制器调用在一个控制器中编写的函数

  25. 25

    如何从服务中调用控制器中的函数

  26. 26

    如何从页面中的jQuery调用Angular JS函数控制器

  27. 27

    使用Karma和Jasmine在Angular JS中测试父控制器范围的变量

  28. 28

    如何在codeigniter的控制器中调用javascript函数?

  29. 29

    如何从外部控制器的指令中调用函数?

热门标签

归档