我正在尝试使用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
但这对我来说也没有意义吗?
答案 0 :(得分:1)
在某些环境中,PhantomJS可能是单元测试的最佳选择,但在某些情况下它会吸收错误消息,即使使用正确的logLevel
也是如此。
为了更好的规格调试,Chrome启动器可能会与Karma一起使用。