javascript 在 e2e 测试中测试路由 Karma 时出错
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16309231/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Error while testing route Karma in e2e tests
提问by koleror
I'm trying to make some basic end to end tests (e2e) on a django/angularjs application using Karma and I'm getting a weird error.
我正在尝试使用 Karma 在 django/angularjs 应用程序上进行一些基本的端到端测试 (e2e),但出现了一个奇怪的错误。
Here is my test code:
这是我的测试代码:
# testacular-e2e.conf.js
describe('Log in tests', function() {
it('should show the disconnected home', function() {
browser().navigateTo('/#');
expect(browser().location().url()).toBe('/#');
});
});
When I'm running this code, I get the following output:
[DEPRECATED ERROR - left for reference only]$>karma start testacular-e2e.conf.js
[2013-04-30 22:19:26.465] [WARN] config - "/" is proxied, you should probably change urlRoot to avoid conflicts
[2013-04-30 22:19:26.467] [DEBUG] config - autoWatch set to false, because of singleRun
INFO [karma]: Karma server started at http://local.host:9876/INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9 (Mac)]: Connected on socket id cwhp0lnTraNa4ToQ0HkS
PhantomJS 1.9 (Mac) Log in tests should show the disconnected home FAILED
TypeError: 'undefined' is not a function (evaluating '$document.injector()')
PhantomJS 1.9 (Mac): Executed 1 of 1 (1 FAILED) (0.098 secs / 0.04 secs)
当我运行此代码时,我得到以下输出:
[弃用错误 - 仅供参考] $>karma start testacular-e2e.conf.js [2013-04-30 22:19:26.465] [WARN] config - "/" 被代理,你可能应该更改 urlRoot 以避免冲突 [2013-04-30 22:19:26.467] [DEBUG] 配置 - autoWatch 设置为 false,因为 singleRun INFO [karma]:Karma 服务器从http开始://local.host:9876/INFO [launcher]: 启动浏览器 PhantomJS INFO [PhantomJS 1.9 (Mac)]: Connected on socket id cwhp0lnTraNa4ToQ0HkS PhantomJS 1.9 (Mac) 登录测试应显示断开连接的主页 FAILED TypeError: 'undefined'不是函数(评估 '$document.injector()') PhantomJS 1.9 (Mac): Executed 1 of 1 (1 FAILED) (0.098 secs / 0.04 secs)
Any one can help please?
Thanks in advance :)
有人可以帮忙吗?
提前致谢 :)
EDIT: Here is my Karma configuration file:
编辑:这是我的 Karma 配置文件:
// Karma configuration
// base path, that will be used to resolve files and exclude
basePath = '';
// frameworks to use
frameworks = ['jasmine', 'ng-scenario'];
// list of files / patterns to load in the browser
files = [
'app/components/angular/angular.js',
'app/components/angular-complete/angular-resource.js',
'app/components/angular-complete/angular-cookies.js',
'app/components/angular-mocks/angular-mocks.js',
'app/components/ng-translate/translate.js',
'app/scripts/*.js',
'app/scripts/services/services.js',
'app/scripts/**/*.js',
'test/spec/**/*.js'
];
// list of files to exclude
exclude = [];
// test results reporter to use
// possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
reporters = ['progress'];
// web server port
port = 9876;
// cli runner port
runnerPort = 9100;
// enable / disable colors in the output (reporters and logs)
colors = true;
// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel = LOG_DEBUG;
// enable / disable watching file and executing tests whenever any file changes
autoWatch = true;
// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS
// - IE (only Windows)
browsers = ['PhantomJS'];
// If browser does not capture in given timeout [ms], kill it
captureTimeout = 60000;
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun = false;
// plugins to load
plugins = [
'karma-jasmine',
'karma-phantomjs-launcher',
'karma-chrome-launcher',
'karma-ng-scenario',
];
EDIT 2: Add component.json file
编辑 2:添加 component.json 文件
# component.json
{
"name": "myapp",
"version": "0.0.0",
"dependencies": {
"angular": "~1.0.5",
"json3": "~3.2.4",
"es5-shim": "~2.0.5",
"angular-resource": "~1.0.5",
"angular-cookies": "~1.0.5",
"angular-complete" : "*",
"jquery" : "~1.9",
"bootstrap" : "~2.3.1",
"bootstrap-js" : "*",
"jquery.localScroll" : "",
"jquery.scrollTo" : "1.4.4",
"ng-translate" : ""
},
"devDependencies": {
"angular-mocks": "~1.0.5",
"angular-scenario": "~1.0.5"
}
}
EDIT 3 : Updated the above Karma conf file + this is my e2e conf file:
编辑 3:更新了上面的 Karma conf 文件 + 这是我的 e2e conf 文件:
// e2e karma configuration
var fs = require('fs');
// Load from basic karma configuration
eval(fs.readFileSync('karma.conf.js')+'');
// list of files / patterns to load in the browser
files = [
'app/components/angular/angular.js',
'app/components/angular-complete/angular-resource.js',
'app/components/angular-complete/angular-cookies.js',
'app/components/angular-mocks/angular-mocks.js',
'app/components/ng-translate/translate.js',
'app/scripts/*.js',
'app/scripts/services/services.js',
'app/scripts/**/*.js',
'test/e2e/**/*.js'
];
// Proxy the root path to the location of app server
proxies = {
'/': 'http://localhost:8000/'
};
If you need the details of the files imported in the "files" params, let me know. With he actual configuration, the "normal" tests (not the e2e ones) works fine but the e2e tests give me the following error:
如果您需要“文件”参数中导入的文件的详细信息,请告诉我。使用实际配置,“正常”测试(不是 e2e 测试)工作正常,但 e2e 测试给我以下错误:
$>karma start karma-e2e.conf.js
[2013-05-01 11:32:19.047] [WARN] config - "/" is proxied, you should probably change urlRoot to avoid conflicts
INFO [karma]: Karma v0.9.2 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9 (Mac)]: Connected on socket id HmPYnc9PJUdaGb35pl-K
PhantomJS 1.9 (Mac) Log in tests should show the disconnected home FAILED
ReferenceError: Can't find variable: browser
at /Users/hugo/Projs/wc/angular/test/e2e/scenarios.js:9
at /Users/hugo/Projs/wc/angular/node_modules/karma-jasmine/lib/adapter.js:107
at http://localhost:9876/karma.js:111
at http://localhost:9876/context.html:68
PhantomJS 1.9 (Mac): Executed 1 of 1 (1 FAILED) (0.082 secs / 0.006 secs)
回答by Brian Lewis
Add this to your e2e config file:
将此添加到您的 e2e 配置文件中:
urlRoot = '/_karma_/';
回答by Michael Jess
For anyone else struggling with this: If you are using requirejs and bootstrap the page manually, make sure you still have the ng-app directive in your HTML file. This fixed it for me.
对于其他为此而苦苦挣扎的人:如果您正在使用 requirejs 并手动引导页面,请确保您的 HTML 文件中仍有 ng-app 指令。这为我修好了。
karma 0.9.5
requirejs 2.1.6
angularjs 1.0.7
karma-ng-scenario 0.0.2
karma-chrome-launcher 0.0.2
karma 0.9.5
requirejs 2.1.6
angularjs 1.0.7
karma-ng-scenario 0.0.2
karma-chrome-launcher 0.0.2
Also, this is my config for my e2e tests with the web server running on localhost:8000:
此外,这是我在 localhost:8000 上运行的 Web 服务器的 e2e 测试的配置:
module.exports = function(config) {
config.set({
frameworks: ['ng-scenario'],
files: [
'test/e2e/**/*.js'
],
basePath: '../',
autoWatch: true,
proxies: {
'/': 'http://localhost:8000/'
},
urlRoot: '__karma__',
browsers: ['Chrome'],
reporters: ['dots'],
plugins: [
'karma-ng-scenario',
'karma-chrome-launcher'
]
});
};
Edit:I played around a bit more with my now working configuration to reproduce the error. It occurred again when I did not sleep()
after navigating to the app root. So this might be worth checking, too.
编辑:我用我现在的工作配置玩了更多,以重现错误。当我sleep()
导航到应用程序根目录后没有出现时,它再次发生。所以这也可能值得检查。
回答by Scott Silvi
So I was using this exact config ... then I realized that jasmine has no concept of Browser. As soon as I removed jasmine from the frameworks, this error went away.
所以我正在使用这个确切的配置......然后我意识到茉莉花没有浏览器的概念。一旦我从框架中删除了 jasmine,这个错误就消失了。
Of course, I got another one, so off to debug that :)
当然,我得到了另一个,所以要调试它:)
回答by S McCrohan
Which version of karma are you using? I see a similar error when I run your test:
您使用的是哪个版本的业力?当我运行您的测试时,我看到了类似的错误:
test/e2e/scenarios.js:9:14: TypeError: Object [object Object]
has no method 'injector'
So it's not just your environment. This looks similar to:
所以这不仅仅是你的环境。这看起来类似于:
https://github.com/angular/angular.js/issues/1518
https://github.com/angular/angular.js/issues/1518
which vojtajina suggested addressing by updating karma to get the latest fixes.
vojtajina 建议通过更新 karma 来解决问题,以获得最新的修复。
As a warning, though, it's worth noting that if you pull karma@canary with npm, you'll have several config changes to make before you can run anything.
不过,作为警告,值得注意的是,如果您使用 npm 拉取 karma@canary,则在运行任何东西之前,您将需要进行一些配置更改。