【问题标题】:Require / Angular / Karma / ui-router - Error: Could not resolve 'landing' from state ''Require / Angular / Karma / ui-router - 错误:无法从状态“”解析“着陆”
【发布时间】:2016-03-07 22:48:46
【问题描述】:

我已经看到针对其他问题发布的此症状,最接近我的问题的是这个 Ionic 问题:

Could not resolve '...' from state ''

PhantomJS 1.9.8 (Mac OS X 0.0.0) 控制器:ContainerCtrl 测试失败 错误:无法从状态“”解析“着陆”

我是 Angular 的 Karma 测试新手,并且很难调试范围问题。

app.js

.config(function($stateProvider, $urlRouterProvider) {
  // For any unmatched url, redirect to landing
  $urlRouterProvider.otherwise("/");

  // Now set up the states
  $stateProvider
    .state('guide', {
      url: "/guide",
      templateUrl: "views/guide.html",
      controller: 'SurveyController as main'
    })
    .state('stop', {
      url: "/stop",
      templateUrl: "views/stop.html",
      controller: 'StopCtrl as stop'
    })
    .state('landing', {
      url: "/",
      templateUrl: "views/landing.html",
      controller: 'AboutCtrl as about'
    });
});

containerSpec.js

define(['angular', 'angular-mocks', 'app'], function(angular, mocks, app) {
'use strict';

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

  var ContainerCtrl, $state;

  beforeEach(angular.mock.module('app.controllers.ContainerCtrl', 'ui.router'));


    beforeEach(angular.mock.inject(function($rootScope, $controller, _$state_) {
     //create an empty scope
     ContainerCtrl = $rootScope.$new();
     $state = _$state_;
     //declare the controller and inject our empty scope
     $controller('ContainerCtrl', { $scope : ContainerCtrl });

    }));

  });
});

container.js

define([
    'angular',
    'services/dataservice'], function (
        angular,
        dataService // jshint ignore:line
        ) {
'use strict';

angular.module('oslerApp.controllers.ContainerCtrl', [])
    .controller('ContainerCtrl', [
            '$scope',
            '$rootScope',
            '$state',
                function(
                    $scope,
                    $rootScope,
                    $state) {

            $state.go('landing');

    }]);

});

更新: 改成logLevel:config.LOG_DEBUG,我看到Spec文件的加载顺序在app.js和ui.router文件之前。

INFO [PhantomJS 1.9.8 (Mac OS X 0.0.0)]: Connected on socket B-PFcQHXMLMqx8cOoznu with id 19321969
DEBUG [launcher]: PhantomJS (id 19321969) captured in 4.068 secs
DEBUG [web-server]: serving: /deploy/node_modules/karma/static/context.html
DEBUG [web-server]: serving (cached): /deploy/node_modules/requirejs/require.js
DEBUG [web-server]: serving (cached): /deploy/node_modules/karma-requirejs/lib/adapter.js
DEBUG [web-server]: serving (cached): /deploy/test/test-main.js
DEBUG [web-server]: serving (cached): /deploy/bower_components/jquery/dist/jquery.js
DEBUG [web-server]: serving (cached): /deploy/node_modules/karma-jasmine/lib/jasmine.js
DEBUG [web-server]: serving (cached): /deploy/node_modules/karma-jasmine/lib/boot.js
DEBUG [web-server]: serving (cached): /deploy/node_modules/karma-jasmine/lib/adapter.js
DEBUG [web-server]: serving (cached): /deploy/bower_components/angular/angular.js
DEBUG [web-server]: serving (cached): /deploy/test/spec/controllers/containerSpec.js
DEBUG [web-server]: serving (cached): /deploy/test/spec/services/dataserviceSpec.js
DEBUG [web-server]: serving (cached): /deploy/app/scripts/app.js
DEBUG [web-server]: serving (cached): /deploy/bower_components/angular-ui-router/release/angular-ui-router.js
DEBUG [web-server]: serving (cached): /deploy/app/scripts/services/dataservice.js
DEBUG [web-server]: serving (cached): /deploy/app/scripts/controllers/container.js

【问题讨论】:

  • 所以containerSpec.js 中的$state 是未定义的?
  • 看起来是这样的。是的。
  • 哦,等等,您正试图通过 $state.go 命令转到 landing,但您还没有在 app.js 中定义状态 landing。解决这个问题。

标签: javascript angularjs unit-testing karma-jasmine


【解决方案1】:

您正试图通过 $state.go 命令进入 landing 状态,但您尚未在 app.js 中定义状态 landing。解决这个问题,看看你会怎么做。

【讨论】:

  • 我试图通过删除任意措辞('landing')和使用基本术语('index')来使这个最原始,但后来忘记在控制器 sn-p 中进行更改。这导致我们走错了路。道歉。状态在我的 app.js 中正确定义。
  • 那么你现在的处境如何?
猜你喜欢
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
相关资源
最近更新 更多