测试失败,如何找出原因?

时间:2016-06-04 17:57:58

标签: angularjs jasmine karma-runner

我正在尝试使用Jasmine和Karma学习角度测试,但是我在尝试创建第一个测试时遇到了一些问题。

首先,我得到了一个非常简单的角应用程序,其控制器名为“testCtrl”。

angular.module("testApp", [])
.controller("testCtrl", function() {
  this.title = "The Title";
});

然后我得到了这个非常简单的index.html文件

<body data-ng-app="testApp">
    <div data-ng-controller="testCtrl as test">
    {{test.title}}
    </div>
</body>

好的,所以到目前为止一切正常。角度应用程序正在运行。

然后我们接受了测试。

describe("Testing AngularJS Test Suite", function() {
  describe("Testing AngularJS Controller", function() {

    it("should initialize the title in the scope", function() {
      module("testApp");

      var ctrl;

      inject(function($controller) {
        ctrl = $controller("testCtrl", {});
      });

      expect(ctrl.title).toBeDefined();
      expect(ctrl.title).toBe("The Title");
    });

  });

});

然后是业力配置文件:

// Karma configuration
// Generated on Sat Jun 04 2016 19:05:45 GMT+0200 (CEST)

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine'],
    files: [
      '../../bower_components/angular/angular.js',
      '../../bower_components/angular-mocks/angular-mocks.js',
      '../app.js',
      'units/*.js'
    ],
    proxies : {
      '/' : 'http://localhost:8080/'
    },    
    exclude: [
    ],
    preprocessors: {
    },
    reporters: ['progress'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['PhantomJS'],
    singleRun: false,
    concurrency: Infinity
  })
}

这就是我开始业力时所得到的。

04 06 2016 19:47:27.770:WARN [config]: "/" is proxied, you should probably change urlRoot to avoid conflicts
04 06 2016 19:47:28.165:WARN [karma]: No captured browser, open http://localhost:9876/
04 06 2016 19:47:28.214:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/
04 06 2016 19:47:28.248:INFO [launcher]: Starting browser PhantomJS
04 06 2016 19:47:28.882:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket /#ulqwsz9WukaVrW-yAAAA with id 47817079
PhantomJS 2.1.1 (Linux 0.0.0) Testing AngularJS Test Suite Testing AngularJS Controller should initialize the title in the scope FAILED
    some-parentfolders/bower_components/angular/angular.js:4631:53
    forEach@some-parentfolders/bower_components/angular/angular.js:322:24
    loadModules@some-parentfolders/bower_components/angular/angular.js:4591:12
    createInjector@some-parentfolders/bower_components/angular/angular.js:4513:30
    workFn@some-parentfolders/bower_components/angular-mocks/angular-mocks.js:3060:60
    inject@some-parentfolders/bower_components/angular-mocks/angular-mocks.js:3040:46
    some-parentfolders/js/tests/units/testingAngularUnitSpec.js:9:13
PhantomJS 2.1.1 (Linux 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.049 secs / 0.038 secs)

大注意:这是一个很大的角度应用程序,需要HTTP服务器才能正常运行。只有这第一次测试很简单。我不确定karma是否设置了自己的HTTP服务器来运行文件,或者它是否只是将其HTTP服务器用于其他内容。我在网上的某个地方读到你应该在你自己的HTTP服务器上托管文件,然后将代理在karma配置中指向该服务器的url(正如我上面所做的那样)。不确定,所以如果我错了请纠正我。

由于我没有得到任何具体的错误信息,我站在这里线索较少,我希望有人可以告诉我什么可能是故事,在哪里看或如何开始麻烦这个。

更新

尝试使用Chrome而不是PhantomJS运行它后,我收到了以下错误:

Error: [$injector:modulerr] Failed to instantiate module testApp due to:
    Error: [$injector:modulerr] Failed to instantiate module some-parentfolders/js/tests due to:
    Error: [$injector:nomod] Module 'some-parentfolders/js/tests' 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.5.6/$injector/nomod?p0=some-parentfolders/js/tests

但这对我来说也没有意义吗?

1 个答案:

答案 0 :(得分:1)

在某些环境中,PhantomJS可能是单元测试的最佳选择,但在某些情况下它会吸收错误消息,即使使用正确的logLevel也是如此。

为了更好的规格调试,Chrome启动器可能会与Karma一起使用。