gpt4 book ai didi

testing - 使用 AngularJS 场景和 redi 实现 e2e 测试的问题

转载 作者:行者123 更新时间:2023-11-28 20:44:41 29 4
gpt4 key购买 nike

我开始使用 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 View 加载了几分之一秒,然后就消失了。我在控制台中收到此错误:

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。

这是我的配置文件,它是我的其他中途和单元测试 karma 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';

我一定是遗漏了一些微不足道的东西,因为这是一个需要测试的基本东西,但我一直在研究一整天,但一直找不到解决方案。

非常感谢对此问题的任何帮助!

最佳答案

我也是这个主题的初学者,但我在这里遇到类似问题已经有一段时间了,我刚刚找到了解决方案。我希望这与您的问题相同。

从我能获得的任何信息来看,似乎存在 karma 网络服务器来代理对您的网络服务器的所有请求。这样,您的测试就能够访问“框架”,因为业力网络服务器与测试在同一域中运行。

因此,您的测试请求带有 browser().navigateTo('/whatever/'); 的任何 url,该请求由 karma 网络服务器接收(即 localhost:9876),它将此请求代理到运行您的网络应用程序的实际网络服务器(即 localhost:8000)。我不知道引擎盖下发生了什么,但不知何故你的测试代码可以与框架一起工作。此外,随着业力网络服务器的运行,如果您在浏览器中手动输入 http://localhost:9876/whatever 您可以像访问 http://localhost 一样访问 url :8000/随便

所有这些代理似乎都适用于我的静态示例,但是,当我开始使用 django 后端时,我开始遇到与您遇到的相同的错误。每当我直接在浏览器中访问 http://localhost:9876/whatever 时,我都可以正常查看 URL,但是由于某种原因,业力测试无法访问框架。

在费尽心机之后,我发现实际发生的事情是我的 http://localhost:9876/whatever url 自动重定向到 http://localhost :8000/whatever/ (我仍然不知道为什么)并且通过该重定向,测试然后尝试访问来自另一个域的框架。只需在 url 后面附加一个“/”,我就停止了这个重定向,并且我的测试能够访问该框架。

在你的情况下,尝试在浏览器中手动访问所有 url(来自 karma web 服务器),同时你的 karma web 服务器打开并检查你是否总是通过 karma web 服务器而不是通过你的 web 访问 url应用程序 Web 服务器(地址应始终指向 localhost:9876 而不是 localhost:8000)。在我看来,通过这些重定向,您的测试开始直接访问您的网络应用程序。

我希望有人能更清楚地说明这个代理是如何工作的,以及为什么重定向会从中逃脱。

关于testing - 使用 AngularJS 场景和 redi 实现 e2e 测试的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17212942/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com