微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – UI路由器Extras打破我的单元测试与意外的结果错误?

题:

– 当安装ui-router-extras(不是普通的ui-router)时,为什么我的测试失败?

– 我如何使用ui-router-extras仍然让我的测试通过?

如果你想快速安装,请使用yeoman angular-fullstack-generator bower安装ui-router-extras

I found a similar issue with normal ui-router.

>幸运的是,ui-router normal在我的测试中运行得很好.
>安装ui-router-extras后,我收到错误

如果我卸载ui-router.extras它的测试通过就好了:

UPDATED为$urlRouterProvider TEST的beforeEach模块
继承了我的考验:

'use strict';

describe('Controller: MainCtrl',function () {

  // load the controller's module
  beforeEach(module('morningharwoodApp'));
  beforeEach(module('socketMock'));

  var MainCtrl,scope,$httpBackend;

  // Initialize the controller and a mock scope


  beforeEach(
    inject( function (_$httpBackend_,$controller,$rootScope) {
      $httpBackend = _$httpBackend_;
      $httpBackend.expectGET('/api/things')
        .respond(['HTML5 Boilerplate','AngularJS','Karma','Express']);

      scope = $rootScope.$new();
      MainCtrl = $controller('MainCtrl',{
        $scope: scope
      });
    }),module(function ($urlRouterProvider) {
      $urlRouterProvider.otherwise( function(){ return false; });
    })
  );



  it('should attach a list of things to the scope',function () {
    $httpBackend.flush();
    expect(scope.awesomeThings.length).toBe(4);
  });
});

这是我的karma.conf

module.exports = function(config) {
  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: [
      'client/bower_components/jquery/dist/jquery.js','client/bower_components/angular/angular.js','client/bower_components/angular-mocks/angular-mocks.js','client/bower_components/angular-resource/angular-resource.js','client/bower_components/angular-cookies/angular-cookies.js','client/bower_components/angular-sanitize/angular-sanitize.js','client/bower_components/lodash/dist/lodash.compat.js','client/bower_components/angular-socket-io/socket.js','client/bower_components/angular-ui-router/release/angular-ui-router.js','client/bower_components/famous-polyfills/classList.js','client/bower_components/famous-polyfills/functionPrototypeBind.js','client/bower_components/famous-polyfills/requestAnimationFrame.js','client/bower_components/famous/dist/famous-global.js','client/bower_components/famous-angular/dist/famous-angular.js','client/app/app.js','client/app/app.coffee','client/app/**/*.js','client/app/**/*.coffee','client/components/**/*.js','client/components/**/*.coffee','client/app/**/*.jade','client/components/**/*.jade','client/app/**/*.html','client/components/**/*.html'
    ],preprocessors: {
      '**/*.jade': 'ng-jade2js','**/*.html': 'html2js','**/*.coffee': 'coffee',},ngHtml2JsPreprocessor: {
      stripPrefix: 'client/'
    },ngJade2JsPreprocessor: {
      stripPrefix: 'client/'
    },// list of files / patterns to exclude
    exclude: [],// web server port
    port: 8080,// level of logging
    // possible values: LOG_disABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
    logLevel: config.LOG_INFO,// enable / disable watching file and executing tests whenever any file changes
    autoWatch: false,// Start these browsers,currently available:
    // - Chrome
    // - ChromeCanary
    // - Firefox
    // - Opera
    // - Safari (only Mac)
    // - PhantomJS
    // - IE (only Windows)
    browsers: ['PhantomJS'],// Continuous Integration mode
    // if true,it capture browsers,run tests and exit
    singleRun: false
  });
};

解决方法

这可能是某些组件依赖于$state的结果,在这种情况下,$state将被实例化并且将执行认路由.这就是为什么要提取一个控制器main.html的模板的原因.

要绕过这个,用$dlicmies替换$state方法的go()和transitionTo():

beforeEach( inject( function ( _$state_ ) {
        state = _$state_;
        spyOn( state,'go' );
        spyOn( state,'transitionTo' );
    } ) );

原文地址:https://www.jb51.cc/js/156236.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐