$ controller不是单页应用程序的函数错误

时间:2017-04-22 04:57:15

标签: angularjs karma-jasmine

我对Angularjs很新。我有一个单页面应用程序,其中index.html是根页面。它包含以下内容

的index.html

'use strict';

angular.module('myApp', [ 'ngRoute', 'ngAnimate', 'ngSanitize', 
    'ui.bootstrap', 'checklist-model', 'blockUI','isteven-multi-select' ]);

var App = angular.module('myApp');

//ngroute code

我有一个链接到index.html的app.js文件,当用户使用ngRoute点击index.html中的链接时会加载相应的页面。

我的app.js页面看起来像这样

app.js

'use strict';

 App.controller('SearchCifCtrl', [ '$scope', '$location', '$uibModal', 
'WorkflowService', 'ConstantService', function($scope, $location, $uibModal, 
 WorkflowService, ConstantService) {

 //some code

 } ]);

现在,当用户点击index.html中的一个链接时,会加载一个search_name.html和search_name_controller.js页面

search_name_controller看起来像这样。

search_name_controller.js

describe('search_name_controller', function () {

beforeEach(function() {
    module('myApp');
});

var $controller;

beforeEach(inject(function(_$controller_){
    $controller = _$controller_;
}));

//code to test method
});

它是单页面应用程序angular.module语句只能在app.js文件中编写。它不是在任何其他js文件中编写的。现在我想使用KARMA测试search_name_controller.js。我已经编写了如下所示的测试代码

search_name_controller.test.js

{{1}}

当我尝试运行此测试时,我收到错误,因为“ $ controller不是函数”。我觉得错误是因为angular.module部分未在search_name_controller.js文件中定义。当我尝试添加它时,我能够运行测试。但我不允许对现有代码进行任何更改。有没有办法我的测试文件可以读取app.js文件的angular.module部分,即使我为search_name_controller.js编写测试场景。

请帮助

1 个答案:

答案 0 :(得分:0)

beforeEach(inject(function($controller){

   controller = $controller('SearchCifCtrl', {
    $scope: scope
  });
 }));

//试试这个注入你的控制器