angularjs - Yeoman 的 Angular.js Codelab - 修复测试

标签 angularjs gruntjs phantomjs yeoman yeoman-generator-angular

我完成了来自 this codelab 的教程,并按照建议尝试修复单元测试中的错误。 但我不知道如何修复这个错误。我已经看过这个问题:running-tests-with-localstorage但这并不能解决我的问题。

这是我的测试文件:

'use strict';

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

  // load the controller's module
  beforeEach(function(){
    module('mytodoApp'),
    module('LocalStorageModule')
  });

  var MainCtrl,
    scope;

  // Initialize the controller and a mock scope
  beforeEach(inject(function ($controller, $rootScope) {
    scope = $rootScope.$new();
    MainCtrl = $controller('MainCtrl', {
      $scope: scope
    });
  }));

  it('should have no items to start', function () {
    expect(scope.todos.length).toBe(0);
  });
});

这是控制台输出:

PhantomJS 1.9.7 (Linux) Controller: MainCtrl should have no items to start FAILED
        Error: [$injector:modulerr] Failed to instantiate module mytodoApp due to:
        Error: [$injector:modulerr] Failed to instantiate module LocalStorageModule due to:
        Error: [$injector:nomod] Module 'LocalStorageModule' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
        http://errors.angularjs.org/1.2.16/$injector/nomod?p0=LocalStorageModule
            at /home/ubuntu/mytodo/bower_components/angular/angular.js:1613
            at ensure (/home/ubuntu/mytodo/bower_components/angular/angular.js:1535)
            at module (/home/ubuntu/mytodo/bower_components/angular/angular.js:1823)
            at /home/ubuntu/mytodo/bower_components/angular/angular.js:3781
        http://errors.angularjs.org/1.2.16/$injector/modulerr?p0=LocalStorageModule&p1=Error%3A%20%5B%24injector%3Anomod%5D%20Module%20'LocalStorageModule'%20is%20not%20available!%20You%20either%20misspelled%20the%20module%20name%20or%20forgot%20to%20load%20it.%20If%20registering%20a%20module%20ensure%20that%20you%20specify%20the%20dependencies%20as%20the%20second%20argument.%0Ahttp%3A%2F%2Ferrors.angularjs.org%2F1.2.16%2F%24injector%2Fnomod%3Fp0%3DLocalStorageModule%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fbower_components%2Fangular%2Fangular.js%3F7dcf1b25480258d399759429338cedc57239f2d1%3A1613%0A%20%20%20%20at%20ensure%20(http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fbower_components%2Fangular%2Fangular.js%3F7dcf1b25480258d399759429338cedc57239f2d1%3A1535)%0A%20%20%20%20at%20module%20(http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fbower_components%2Fangular%2Fangular.js%3F7dcf1b25480258d399759429338cedc57239f2d1%3A1823)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fbower_components%2Fangular%2Fangular.js%3F7dcf1b25480258d399759429338cedc57239f2d1%3A3781
            at /home/ubuntu/mytodo/bower_components/angular/angular.js:3810
        http://errors.angularjs.org/1.2.16/$injector/modulerr?p0=mytodoApp&p1=Error%3A%20%5B%24injector%3Amodulerr%5D%20Failed%20to%20instantiate%20module%20LocalStorageModule%20due%20to%3A%0AError%3A%20%5B%24injector%3Anomod%5D%20Module%20'LocalStorageModule'%20is%20not%20available!%20You%20either%20misspelled%20the%20module%20name%20or%20forgot%20to%20load%20it.%20If%20registering%20a%20module%20ensure%20that%20you%20specify%20the%20dependencies%20as%20the%20second%20argument.%0Ahttp%3A%2F%2Ferrors.angularjs.org%2F1.2.16%2F%24injector%2Fnomod%3Fp0%3DLocalStorageModule%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fbower_components%2Fangular%2Fangular.js%3F7dcf1b25480258d399759429338cedc57239f2d1%3A1613%0A%20%20%20%20at%20ensure%20(http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fbower_components%2Fangular%2Fangular.js%3F7dcf1b25480258d399759429338cedc57239f2d1%3A1535)%0A%20%20%20%20at%20module%20(http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fbower_components%2Fangular%2Fangular.js%3F7dcf1b25480258d399759429338cedc57239f2d1%3A1823)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fbower_components%2Fangular%2Fangular.js%3F7dcf1b25480258d399759429338cedc57239f2d1%3A3781%0Ahttp%3A%2F%2Ferrors.angularjs.org%2F1.2.16%2F%24injector%2Fmodulerr%3Fp0%3DLocalStorageModule%26p1%3DError%253A%2520%255B%2524injector%253Anomod%255D%2520Module%2520'LocalStorageModule'%2520is%2520not%2520available!%2520You%2520either%2520misspelled%2520the%2520module%2520name%2520or%2520forgot%2520to%2520load%2520it.%2520If%2520registering%2520a%2520module%2520ensure%2520that%2520you%2520specify%2520the%2520dependencies%2520as%2520the%2520second%2520argument.%250Ahttp%253A%252F%252Ferrors.angularjs.org%252F1.2.16%252F%2524injector%252Fnomod%253Fp0%253DLocalStorageModule%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A8080%252Fbase%252Fbower_components%252Fangular%252Fangular.js%253F7dcf1b25480258d399759429338cedc57239f2d1%253A1613%250A%2520%2520%2520%2520at%2520ensure%2520(http%253A%252F%252Flocalhost%253A8080%252Fbase%252Fbower_components%252Fangular%252Fangular.js%253F7dcf1b25480258d399759429338cedc57239f2d1%253A1535)%250A%2520%2520%2520%2520at%2520module%2520(http%253A%252F%252Flocalhost%253A8080%252Fbase%252Fbower_components%252Fangular%252Fangular.js%253F7dcf1b25480258d399759429338cedc57239f2d1%253A1823)%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A8080%252Fbase%252Fbower_components%252Fangular%252Fangular.js%253F7dcf1b25480258d399759429338cedc57239f2d1%253A3781%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fbower_components%2Fangular%2Fangular.js%3F7dcf1b25480258d399759429338cedc57239f2d1%3A3810
            at /home/ubuntu/mytodo/bower_components/angular/angular.js:3810
PhantomJS 1.9.7 (Linux): Executed 1 of 1 (1 FAILED) ERROR (0.04 secs / 0.006 secs)
Warning: Task "karma:unit" failed. Use --force to continue.

Aborted due to warnings.

更新:添加了答案。

这是我的 karma.conf.js 文件,已修复。必须将模块 angular-local-storage.js 添加到文件列表中。

// list of files / patterns to load in the browser
    files: [
      'bower_components/angular/angular.js',
      'bower_components/angular-mocks/angular-mocks.js',
      'bower_components/angular-animate/angular-animate.js',
      'bower_components/angular-cookies/angular-cookies.js',
      'bower_components/angular-resource/angular-resource.js',
      'bower_components/angular-route/angular-route.js',
      'bower_components/angular-sanitize/angular-sanitize.js',
      'bower_components/angular-touch/angular-touch.js',
      'bower_components/jquery/dist/jquery.js',
      'bower_components/jquery-ui/jquery-ui.js',
      'bower_components/angular-ui-sortable/sortable.js',
      'bower_components/angular-local-storage/angular-local-storage.js',
      'app/scripts/**/*.js',
      'test/mock/**/*.js',
      'test/spec/**/*.js'
    ],

最佳答案

karama.conf.js 文件包含一个 files 数组。测试时,请确保包含所有依赖模块的文件已插入到数组中:

files: [
    /* file paths */
]

另一件很酷的事情是文件部分支持 patterns 。将来避免此问题的一种方法是将所有模块或所需脚本放在一个位置或一个公共(public)文件夹下,并使用一种模式将它们全部加载:

files: [
    /* or whatever other pattern you want to use */
    '/myProject/scripts/vendor/*.min.js',
    '/myProject/scripts/modules/*.min.js',
    /* the use of ** will search any child folder for the file pattern */
    '/myProject/scripts/tests/**/*.js'
]

关于angularjs - Yeoman 的 Angular.js Codelab - 修复测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25653648/

相关文章:

phantomjs - PhantomJS获取资源错误时能否获取失败的请求id?

javascript - 如果服务器在一次执行后没有重置,PhantomJS 进程就会死亡

angularjs - Mean stack Web 应用程序基于角色的访问控制

angularjs - 如何防止 ng-src 在数据到达之前加载图像?

css - 在服务器上少编译?

javascript - 咕噜初始化 : How can I copy or create an empty directory?

angularjs - 平均堆栈身份验证 - 最佳实践

javascript - HTML 5 视频播放器可以在模拟器中运行,但不能在实际设备上运行

javascript - 最简单的 Gruntfile.coffee 可以证明 grunt 正在工作吗?

javascript - 尝试使用 PhantomJS 让 Affectiva 在 Node.js 上运行