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' );
    } ) );

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...