Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularjs测试中的依赖关系处理_Javascript_Angularjs_Node.js_Browserify_Karma Mocha - Fatal编程技术网

Javascript angularjs测试中的依赖关系处理

Javascript angularjs测试中的依赖关系处理,javascript,angularjs,node.js,browserify,karma-mocha,Javascript,Angularjs,Node.js,Browserify,Karma Mocha,这是为了工作(我有权限),所以我不能发布准确的代码 所以我必须测试一个大模块的控制器。该模块具有一个大型配置函数,其中包含一组控制器,用于不同页面的逻辑 对于实际应用程序,它加载了bower,这很令人恼火,因为我正在使用和npm进行测试。因此,依赖关系是一团乱。我基本上必须导入从bower.json加载到package.json的所有内容 这是我的karma.conf.js: module.exports = function(config) { config.set({ baseP

这是为了工作(我有权限),所以我不能发布准确的代码

所以我必须测试一个大模块的控制器。该模块具有一个大型配置函数,其中包含一组控制器,用于不同页面的逻辑

对于实际应用程序,它加载了bower,这很令人恼火,因为我正在使用和npm进行测试。因此,依赖关系是一团乱。我基本上必须导入从bower.json加载到package.json的所有内容

这是我的karma.conf.js:

module.exports = function(config) {
  config.set({
    basePath: 'resources',
    browserify: {
      debug: true,
      transform: [ 'browserify-shim' ]
    },
    browsers: [ 'PhantomJS' ],
    captureTimeout: 60000,
    client: {
      mocha: {}
    },
    files: [
      'tests/assist/test.js',
      'assets/scripts/libs/logger.min.js'
    ],
    frameworks: [ 'browserify', 'phantomjs-shim', 'mocha', 'chai' ],
    port: 8080,
    preprocessors: {
      'tests/assist/controller.js': [ 'browserify' ]
    },
    reporters: [ 'mocha', 'coverage' ],
    singleRun: true
  });
};
下面的代码是我的test.js(删除一些特定于公司的名称)。我还需要放angular.mock。否则就不行了

require('angular');
require('angular-mocks');

//Main module needs these
jQuery = require('jquery');
require('angular-bootstrap');
require('angular-recaptcha');
require('angular-ui-router');
require('ngstorage');
require(**The path to the main module**);
require(**The path to a service it uses**);
require(**The path to a service it uses**);
require(**The path to a service it uses**);

describe('Blah', function () {
  beforeEach(angular.mock.module('myApp'));

  var $controller;

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

  describe('blahblah', function () {
    it('sets loading to true', function () {
      var $scope = {};
      var controller = $controller('controller', {$scope: $scope});
      assert($scope.showLoading === true);
    });
  });
});
主要模块:

(function() {
    'use strict';
})();


// Jquery noconflict
jQuery.noConflict();

var myApp = angular.module('myApp', ['ui.router', 'ngStorage', 'vcRecaptcha', 'ui.bootstrap']);

myApp.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider) {
    ...
}])
.run([blah bunch of dependencies]) {
   ...
}]);
控制器(单独的fie):

正如你所看到的,我在地狱里。我在angular站点上进行了示例测试,主要问题是控制器看不到依赖项和myApp控制器/服务中的“引用错误:找不到变量:myApp”


如果有人有更好的测试方法,我洗耳恭听。

这不是依赖地狱,也不是测试

代码似乎依赖于
myApp
全局变量,这与角度模块的用途完全相反

myApp
应该是在每个函数作用域中动态定义的局部变量

(function () {

var myApp = angular.module('myApp', [...]);
...

})();


这与依赖性无关,也与测试无关

代码似乎依赖于
myApp
全局变量,这与角度模块的用途完全相反

myApp
应该是在每个函数作用域中动态定义的局部变量

(function () {

var myApp = angular.module('myApp', [...]);
...

})();


我不一定有更好的测试方法,因为我有一个建议。Angularjs并不意味着要用一堆控制器来编写,事实上在Angular2中,他们完全取消了控制器,因为人们错过了使用它们。我建议回顾一下这些文件,并考虑走一条更具指导性的中心路线。我的公司最近从控制器切换到工厂和指令,并注意到一个重大的改进。谢谢评论。我只是一名实习生,所以我只需要测试一个我没有编写的代码库,所以我不能真正做任何转换等。希望埃斯图斯的回答能解决这个问题。我没有更好的测试方法,因为我有一个建议。Angularjs并不意味着要用一堆控制器来编写,事实上在Angular2中,他们完全取消了控制器,因为人们错过了使用它们。我建议回顾一下这些文件,并考虑走一条更具指导性的中心路线。我的公司最近从控制器切换到工厂和指令,并注意到一个重大的改进。谢谢评论。我只是一名实习生,所以我只需要测试一个我没有编写的代码库,所以我不能真正做任何切换等。希望estus的回答能够解决这个问题。如果你有10个控制器,并且想清理一下,你还可以在另一个js文件中使用你的控制器,这难道不是正确的吗。您只需通过角度引用模块,而不是通过如上所述的全局变量。例如:角度。模块('myApp')。控制器(……)请忽略此项comment@Ohjay44当然,这是一个偏好的问题。对于单控制器定义来说,它可能是多余的,但对于样式一致性是有益的。嘿,estus,它修复了我的“找不到myApp”问题,谢谢!整个测试仍然不起作用,我想至少还有5个错误需要处理,哈哈。现在我有了:null不是一个对象(evauting'document.getElementById(“appURL”).value)。如果您知道如何修复它的话。错误在一个服务文件中。@patrickd很可能是因为元素不在DOM中,
getElementById(“appURL”)
返回null。请记住,Angular specs中的根元素与DOM分离,所有DOM调用最好都是模拟的。请随时就每个问题提出相关问题。如果您有10个控制器,并且想稍微清理一下,那么您还可以在另一个js文件中使用控制器,这难道不正确吗?Y您只需要通过angular而不是像上面所说的通过全局变量引用模块。例如:angular.module('myApp')。controller(…)请忽略这一点comment@Ohjay44当然,这是一个偏好的问题。它可能对单控制器定义是多余的,但对样式一致性是有益的。嘿,estus,它修复了我的“找不到我的应用程序”问题,谢谢!整体测试仍然不起作用,我想至少还有5个错误需要处理哈哈。现在我有了:null不是一个object(evaluating'document.getElementById(“appURL”).value。如果您知道如何修复它,则返回值。错误在服务文件中。@patrickd很可能是因为元素不在DOM中,并且
getElementById(“appURL”)
返回null。请记住,Angular specs中的根元素与DOM分离,所有DOM调用最好都是模拟的。请随时发布关于每个问题的相关问题。
(function () {

var myApp = angular.module('myApp');
myApp.controller('controller', ...)
...

})();