AngularJS和Karma - 包含或要求文件

时间:2013-12-02 08:55:15

标签: angularjs protractor

我一直在使用AngularJS和Karma / Jasmine进行单元测试一段时间(几个月,我觉得这几乎让我老手)。我一直想要一种在我的Karma测试中制作可重复使用的函数的方法,但是我已经让自己无法做到这一点。

我最近也开始使用量角器,它提供端到端测试。在量角器中,有一个require语法将一个文件包含到另一个文件中,允许我们创建库函数。这非常方便,我想在Karma / Jasmine中有类似的东西。

我还没有找到量角器中存在的这种能力,但它在Karma中显然不存在。有没有人发现或实施过类似的能力?

1 个答案:

答案 0 :(得分:1)

是的,按照jl的建议,我最终得到了这段代码,效果非常好。很明显,我的javascript知识是一个缺陷,我并没有真正考虑过这一切都存在于全球地址空间中。

首先,我创建了一个文件“base_controller.spec.js”。在这个文件中,我声明了一个全局对象:

var BaseController = 
  {
    baseBeforeEach: function() {
      // mock Application to allow us to inject our own dependencies
      beforeEach(angular.mock.module('bProject'));

      // create the custom mocks on the root scope
      beforeEach(angular.mock.inject(function($rootScope, _$httpBackend_, SidebarService, $state, BreadcrumbService ){
        //create an empty scope
        scope = $rootScope.$new();
        scope.$rootScope = $rootScope;
        scope.$state = $state;
        scope.breadcrumb = BreadcrumbService;

        // we're just declaring the httpBackend here, we're not setting up expectations or when's - they change on each test
        scope.httpBackend = _$httpBackend_;

        // setup the project id to a known value
        scope.setupSidebar = SidebarService.sidebar;
        scope.setupSidebar.projectId = 2;

      }));
    },

    baseAfterEach: function() { 
      afterEach(function() {
        scope.$digest();
        scope.httpBackend.verifyNoOutstandingExpectation();
        scope.httpBackend.verifyNoOutstandingRequest();
      });    
    }
  };

然后,我在测试中使用BaseController:

describe( 'Risk functionality.', function() {
  BaseController.baseBeforeEach();
  BaseController.baseAfterEach();

  describe( 'Risks list controller.', function() {  

这个例子相当简单,尽管每个控制器上都有模拟标准。但我在每个控制器上都有一组标准测试,这个方法让我这样做。

需要注意的是你的业力配置中包含的顺序 - 您需要提前包含此文件,否则某些模块无法看到它。

我会给jl一个upvote,但这是一个评论,所以我不能!!