【发布时间】:2013-06-20 11:52:54
【问题描述】:
我开始使用angular-scenario 在我的 django 应用程序中编写 e2e 测试,但从一开始我就被阻止了。
我在我的应用程序中开辟了一种伪造用户登录的方法,因此我可以开始测试应用程序功能,但我无法让它工作。这是我的测试代码:
describe("E2E test", function () {
beforeEach(function () {
// This actually kills any session in the server
browser().navigateTo('/backdoor/');
});
it('should "fake" login', function () {
browser().navigateTo('/backdoor/?username=jane.doe');
....
});
});
在服务器端,当有人点击'/backdoor/?username=some.valid.user' 时,我会验证用户,然后重定向到'/messages/',结果是对客户端的 302 响应。
我可以在我的日志中看到 karma 命中 /backdoor/,然后是 /backdoor/?username=jane.doe',它实际上通过重定向并命中 '/messages':
[20/Jun/2013 11:20:20] "GET /backdoor/ HTTP/1.1" 200 5844
[20/Jun/2013 11:20:20] "GET /backdoor/?username=jane.doe HTTP/1.1" 302 0
[20/Jun/2013 11:20:20] "GET /messages/ HTTP/1.1" 200 35632
[20/Jun/2013 11:20:20] "GET /static/css/bootstrap.min.css HTTP/1.1" 200 103314
..... tons of css and javascript fetching
但是,此时,我收到以下错误:
Chrome 27.0 (Linux) E2E test should "fake" login FAILED
browser navigate to '/backdoor/?username=jane.doe'
http://localhost:9203/base/spec/e2e/e2e.spec.js?1371726473000:20:13: Sandbox Error: Application document not accessible.
Chrome 27.0 (Linux): Executed 1 of 1 (1 FAILED) (14.336 secs / 13.967 secs)
在浏览器中调试时,我什至看到/messages 视图加载了几分之一秒,然后它就消失了。我在控制台中收到此错误:
Blocked a frame with origin "http://localhost:9203" from accessing a frame with `origin "http://localhost:8000"`. Protocols, domains, and ports must match.
我猜这是正常行为,因为 karma 使用嵌入式 iframe 进行测试,而不是 webdriver。
这是我的配置文件,它是我的其他中途和单元测试业力 conf 文件的修改副本,可以很好地与 jasmine 配合使用。 (我已经下载了最新的angular-scenario.js文件):
basePath = '.';
files = [
// ANGULAR_SCENARIO,
'js/libraries/angular-scenario/angular-scenario.js',
ANGULAR_SCENARIO_ADAPTER,
'js/libraries/jquery-1.7.2.min.js',
'js/libraries/angular-unstable/angular.js',
'helpers/angular-mocks.js',
'js/libraries/lodash.js',
'js/libraries/underscore.observable.js',
'js/libraries/date.js',
'js/variables.js',
'js/angular/*.js',
'spec/e2e/*.js'
];
autoWatch = true;
browsers = ['Chrome'];
singleRun = false;
colors = true;
logLevel = LOG_INFO;
port = 9203;
runnerPort = 9303;
captureTimeout = 5000;
proxies = {
'/': 'http://localhost:8000/'
};
urlRoot = 'e2e';
我一定遗漏了一些微不足道的东西,因为这是一个需要测试的基本东西,但我已经研究了一整天,我一直找不到解决方案。
我们将非常感谢您对此问题的任何帮助!
【问题讨论】:
标签: testing angularjs angular-scenario