相关疑难解决方法(0)

在Jasmine单元测试中模拟AngularJS模块依赖项

我试图在一个模块中对控制器代码进行单元测试,该模块将其他模块作为依赖项,但是无法弄清楚如何正确地模拟它们.

我正在使用Jasmine Framework并使用Karma(Testacular)运行我的测试.

模块代码

var app = angular.module('events', ['af.widgets', 'angular-table']);

app.controller('eventsCtrl', function([dependencies]){
    $scope.events = [];
    ...
});
Run Code Online (Sandbox Code Playgroud)

规格代码

describe('events module', function(){
    var $scope,
        ctrl;

    beforeEach(function(){
        angular.mock.module('af.widgets', []);
        angular.mock.module('angular-table', []);
        module('events', ['af.widgets', 'angular-table']);
    });

    beforeEach(inject(function($rootScope, $controller){
        $scope = $rootScope.new();
        ctrl = $controller('NameCtrl', {
            $scope: $scope,
        });
    }));

    it('should have an empty events array', function(){
        expect($scope.events).toBe([]);
    })
});
Run Code Online (Sandbox Code Playgroud)

我得到的错误是Karma是"没有模块af.widgets",所以显然我并没有正确地模仿模块依赖.任何提示?

unit-testing jasmine angularjs karma-runner

71
推荐指数
2
解决办法
8万
查看次数

在单元测试AngularJS服务时注入相关服务

我正在测试服务A,但服务A依赖于服务B(即服务B注入服务A).

我已经看到了这个问题,但我的情况有点不同,因为在我看来,模拟服务B而不是注入服务B的实际实例更有意义.我用茉莉花间谍嘲笑它.

这是一个示例测试:

describe("Sample Test Suite", function() {

  beforeEach(function() {

    module('moduleThatContainsServiceA');

    inject([
      'serviceA', function(service) {
        this.service = service;
      }
    ]);

  });

  it('can create an instance of the service', function() {
    expect(this.service).toBeDefined();
  });
});
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

错误:未知提供者:serviceBProvider

我怎么能这样做?

javascript unit-testing jasmine angularjs karma-runner

51
推荐指数
4
解决办法
5万
查看次数

单元测试AngularJS中的配置阶段

我正在尝试学习如何为AngularJS编写单元测试.我从一开始就开始了

angular.module( ... ).config( ... )

我想测试内部配置是什么.以下是相关部分的外观:

angular.module('ogApp', ['ngCookies','ui.router','ogControllers','ogServices','ogDirectives','ogMetricsData'])

.config([
  '$stateProvider', '$locationProvider',
  function ($stateProvider, $locationProvider) {
    $stateProvider.
      state('login', {
        templateUrl: 'connect.html'
      }).state('addViews', {
        templateUrl: 'add-views.html'
      }).state('dashboard', {
        templateUrl: 'dashboard.html'
      });
    $locationProvider.
      html5Mode(true).
      hashPrefix('!');
  }
]);
Run Code Online (Sandbox Code Playgroud)

我认为测试这段代码的最简单方法是为$stateProvider和注入模拟$locationProvider.然后执行配置阶段.在那之后,断言如何$stateProvider$locationProvider应该看起来像.

如果我的想法是正确的,我的问题是,我不知道如何将这些模拟注入模块并从测试中执行其配置阶段.

你能告诉我如何测试这段代码吗?

unit-testing angularjs angular-ui-router

23
推荐指数
2
解决办法
9732
查看次数

使用页内JSON初始化AngularJS $资源

我正在使用AngularJS'$资源来获取和更新对象.为了在页面加载时保存往返,我在页面上的变量中有JSON对象.如何用这些数据初始化$ resource而不是调用$ get?

angularjs

14
推荐指数
1
解决办法
5797
查看次数

如何在AngularJS中测试.run?

myApp.run([
  '$rootScope', 'userService', function($rootScope, userService) {
    return userService.isAuthenticated().then(function(response) {
      if (response.data.authenticated) {
        return $rootScope.$broadcast('login', response.data);
      } else {
        return userService.logout();
      }
    });
  }
]);
Run Code Online (Sandbox Code Playgroud)

那是我在init.js文件中的代码.我怎样才能对此进行单元测试?

angularjs karma-runner

8
推荐指数
1
解决办法
3445
查看次数

你如何模拟作为函数的Angular服务?

我们有一个我们称之为a的东西CORShttpService,它基本上是一个服务器的包装器$http,但封装了我们需要的一些CORS功能.我现在正在为CORShttpService注入其中的服务编写一些测试.此服务的代码如下:

CORShttpService({method: requestMethod, url: getUrl(path), data: data}).
    success(function(data, status, headers) {
        //do success stuff
    }).
    error(function(data, status, headers) {
       //do error stuff
    });
Run Code Online (Sandbox Code Playgroud)

我想嘲笑电话CORShttpService,但我不知道如何去做.我正在使用Jasmine,它的spyOn功能需要一个对象来模拟对象上的函数.我CORShttpService没有任何对象,所以我不知道怎么去嘲笑它.是的,我可以$httpBackend用来模拟最终设置的请求CORShttpService,但我不希望它首先进入该服务.我想隔离单元测试并简单地模拟外部调用.有什么方法可以嘲笑这个只是一个功能的服务吗?

javascript unit-testing jasmine angularjs

2
推荐指数
1
解决办法
8276
查看次数