Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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
AngularJs、Karma、Jasmine,为什么在测试用例的这个场景下服务不可用?_Angularjs_Jasmine_Karma Runner - Fatal编程技术网

AngularJs、Karma、Jasmine,为什么在测试用例的这个场景下服务不可用?

AngularJs、Karma、Jasmine,为什么在测试用例的这个场景下服务不可用?,angularjs,jasmine,karma-runner,Angularjs,Jasmine,Karma Runner,我正在使用grunt并执行因果报应任务。我用karma/jasmine配置了单元测试用例。似乎一切都应该就绪,但我的一项服务无法加载 下面的ConstantsService导致错误 (function() { 'use strict'; /** * Run a suite of tests. */ describe('Registration Service API tests:', function() { beforeEach(module('registr

我正在使用grunt并执行因果报应任务。我用karma/jasmine配置了单元测试用例。似乎一切都应该就绪,但我的一项服务无法加载

下面的ConstantsService导致错误

(function() {
  'use strict';
  /**
   * Run a suite of tests.
   */
  describe('Registration Service API tests:', function() { 
    beforeEach(module('registration'));

    var scope = null;
    var constantService = null;

    console.log('Setting up test : ');
    /**
     * Set up variables before each call.
     * @returns
     */
    beforeEach(inject(function($rootScope) {
      scope = $rootScope.$new();              
      console.log('Before test[1]!! : ');
    }));

    beforeEach(inject(function($injector) {
      var serv1 = $injector.get('ConstantsService');
      console.log('Before test[2]!! : ');
    }));


    /**
     * Tear down after each test.
     * @returns
     */
    afterEach(function() {
      console.log('After test!! : ');
    });  

    /**
     * Run the behavior driven test.
     */
    it('Test Constant API properties:', function() {  
      console.log('Running test!! : '+ angular.toJson(scope));      
    });      
  });
})();
错误:

[32mINFO [PhantomJS 1.9.8 (Windows 7)]: [39mConnected on socket M74ZRKv1ww3Od5Y0gbhR with id 86992083
[36mDEBUG [launcher]: [39mPhantomJS (id 86992083) captured in 2.23 secs
[36mDEBUG [web-server]: [39mserving: C:\someuser\projects\workspace\register\WebContent\node_modules\karma\static/context.html
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/node_modules/karma-jasmine/lib/jasmine.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/node_modules/karma-jasmine/lib/boot.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/node_modules/karma-jasmine/lib/adapter.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/bower_components/jquery/dist/jquery.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular/angular.min.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular-mocks/angular-mocks.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular-ui-router/release/angular-ui-router.min.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular-translate/angular-translate.min.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular-animate/angular-animate.min.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/bower_components/bootstrap/dist/js/bootstrap.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/bower_components/moment/min/moment.min.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/js/base64.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/modules/registration/scripts/registration.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/scripts/services/applicationConstants.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/modules/registration/controllers/registrationCtrl.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/modules/password/scripts/password.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/modules/password/controllers/passwordCtrl.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/modules/registration/submodules/verify/scripts/controllers/verifyInformationCtrl.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/modules/registration/submodules/accountSetup/scripts/controllers/accountPasswordSetupCtrl.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/scripts/3c74702c.modules.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/modules/registration/scripts/progressbar.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/WebContent/app/app.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/test/spec/registration/tests/applicationConstantTest.js
[36mDEBUG [web-server]: [39mserving (cached): C:/someuser/projects/workspace/register/test/testHelper.js
PhantomJS 1.9.8 (Windows 7) LOG: [36m'Setting up test : '[39m


[1A[2KPhantomJS 1.9.8 (Windows 7): Executed 0 of 1[32m SUCCESS[39m (0 secs / 0 secs)
[1A[2KLOG: [36m'Before test[1]!! : '[39m
PhantomJS 1.9.8 (Windows 7): Executed 0 of 1[32m SUCCESS[39m (0 secs / 0 secs)
[1A[2KLOG: [36m'Running test!! : "$SCOPE"'[39m
PhantomJS 1.9.8 (Windows 7): Executed 0 of 1[32m SUCCESS[39m (0 secs / 0 secs)
[1A[2KLOG: [36m'After test!! : '[39m
PhantomJS 1.9.8 (Windows 7): Executed 0 of 1[32m SUCCESS[39m (0 secs / 0 secs)
[1A[2K[31mPhantomJS 1.9.8 (Windows 7) Registration Service API tests: Test Constant API properties: FAILED[39m
    Error: [$injector:unpr] http://errors.angularjs.org/1.4.0/$injector/unpr?p0=ConstantsServiceProvider%20%3C-%20ConstantsService
        at C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular/angular.min.js:40
        at d (C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular/angular.min.js:38)
        at C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular/angular.min.js:40
        at d (C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular/angular.min.js:38)
        at C:/someuser/projects/workspace/register/test/spec/registration/tests/applicationConstantTest.js?52375e25073be74d7060ae6c13510c057f544726:26
        at e (C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular/angular.min.js:38)
        at workFn (C:/someuser/projects/workspace/register/WebContent/app/bower_components/angular-mocks/angular-mocks.js:2420)
        at C:/someuser/projects/workspace/register/WebContent/node_modules/karma-jasmine/lib/boot.js:117
        at C:/someuser/projects/workspace/register/WebContent/node_modules/karma-jasmine/lib/adapter.js:171
        at http://localhost:10086/karma.js:189
        at http://localhost:10086/context.html:81
    undefined
PhantomJS 1.9.8 (Windows 7): Executed 1 of 1[31m (1 FAILED)[39m (0 secs / 0.014 secs)
[1A[2KPhantomJS 1.9.8 (Windows 7): Executed 1 of 1[31m (1 FAILED)[39m[31m ERROR[39m (0.002 secs / 0.014 secs)
[36mDEBUG [karma]: [39mRun complete, exitting.
[36mDEBUG [launcher]: [39mDisconnecting all browsers
[36mDEBUG [launcher]: [39mProcess PhantomJS exited with code 0
[36mDEBUG [temp-dir]: [39mCleaning temp dir C:\Users\User\AppData\Local\Temp\karma-86992083
[33mWarning: Task "karma:registration" failed. Use --force to continue.[39m

[31mAborted due to warnings.[39m
Grunfile.js中的相关文件:

 karma: {               
   registration: {
     configFile: 'karma.conf.js',
     singleRun: true
   }
 },
Karma配置文件:

module.exports=函数(配置){ config.set({ //启用/禁用监视文件并在任何文件更改时执行测试 自动观察:错误

// base path, that will be used to resolve files and exclude
basePath: '',

// testing framework to use (jasmine/mocha/qunit/...)
frameworks: ['jasmine'],

// list of files / patterns to load in the browser
files: [
        'app/bower_components/jquery/dist/jquery.js',
        'app/bower_components/angular/angular.min.js',
        'app/bower_components/angular-mocks/angular-mocks.js',
        'app/bower_components/angular-ui-router/release/angular-ui-router.min.js',
        'app/bower_components/angular-translate/angular-translate.min.js',
        'app/bower_components/angular-animate/angular-animate.min.js',            
        'app/bower_components/bootstrap/dist/js/bootstrap.js',
        'app/bower_components/moment/min/moment.min.js',
        'app/js/base64.js',

        'app/modules/registration/scripts/registration.js',
        'app/scripts/services/applicationConstants.js',
        'app/modules/registration/controllers/registrationCtrl.js',          

        'app/modules/registration/submodules/verify/scripts/controllers/verifyInformationCtrl.js',
        'app/modules/registration/submodules/accountSetup/scripts/controllers/accountPasswordSetupCtrl.js',

        'app/scripts/*.js',
        'app/scripts/**/*.js',
        'app/modules/**/*.js',
        'app/app.js',                  
        '../test/**/*.js',
        'app/scripts/services/applicationConstants.js',
],
这是我要加载的服务。我无法引用已定义的服务

(function() {
  'use strict';
    angular.module('registration').factory('ConstantsService', ['$q', function ($q) {     
      var appInformation = {                    
          appname : 'app1'        
      };
      /**
       * Return encoded representation of application information.
       */
      var encodeAppInformation = function() {
        var dataResult = "000000";
        var milliseconds = (new Date()).getTime();
        if (!window.btoa) {
        window.btoa = base64.encode(appInformation.appname);
      }     
        dataResult = window.btoa(appInformation.appname+';'+milliseconds) ;
        return dataResult; 
      };
        return {
        APPLICATION_INFORMATION: appInformation,
        encodeAppInformation : encodeAppInformation
      };
    }]);
})();

不要在每个块之前注入
$injector
,而是注入服务本身,如下所示:

beforeEach(inject(function(ConstantsService) {
      var serv1 = ConstantsService;
      console.log('Before test[2]!! : ');
    }));
问题还可能是您过度包含脚本,模块定义被覆盖,特别是在本节中

'app/scripts/*.js',
    'app/scripts/**/*.js',
    'app/modules/**/*.js',
    'app/app.js',                  
    '../test/**/*.js',
    'app/scripts/services/applicationConstants.js',
如果您检查angularjs生成的,您可以看到以下模式可以清除注册:

angular.module('myModule', [])
  .service('myCoolService', function () { /* ... */ });

angular.module('myModule', [])
  // myModule has already been created! This is not what you want!
  .directive('myDirective', ['myCoolService', function (myCoolService) {
    // This directive definition throws unknown provider, because myCoolService
    // has been destroyed.
  }]);

这可能与包含文件的方式有关

我双重添加了它,但仍然存在相同的问题我可以通过一种方式轻松打印模块中的服务,这可能有助于调试。ConstantsService未定义并导致错误。我首先尝试了这一点。beforeeach语句失败。这几乎就像没有加载ConstantsService一样出于某些原因。对于您最近的更新,我有几个文件,我想要一个模块,但要向该模块添加多个服务。因此,我如何更正您描述的错误。我认为模块定义会在您定义它们时向模块“添加”一个指令或服务。这解决了问题,我不知道为什么。我去掉了“w”ildcard的脚本包含了上面的脚本,只是显式地包含了脚本,这就解决了问题。奇怪。我希望如果已经包含了脚本,那么上面的通配符就不会起作用。