Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 使用AngularJS场景和redi实现e2e测试的问题_Testing_Angularjs_Angular Scenario - Fatal编程技术网

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

Testing 使用AngularJS场景和redi实现e2e测试的问题,testing,angularjs,angular-scenario,Testing,Angularjs,Angular Scenario,我开始在django应用程序中使用angular scenario编写e2e测试,从一开始我就被阻止了 我已经在我的应用程序中打开了一种伪造用户登录的方法,这样我就可以开始测试应用程序的功能,但我无法让它工作。这是我的测试代码: describe("E2E test", function () { beforeEach(function () { // This actually kills any session in the server brows

我开始在django应用程序中使用
angular scenario
编写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

这是我的配置文件,它是我的另一个中途和单元测试karma-conf文件的修改副本,可以很好地与jasmine配合使用。(我已经下载了最新的
angular scenario.js
文件):

我一定错过了一些琐碎的东西,因为这是一个需要测试的基本问题,但我已经研究了一整天,我一直无法找到解决方案


对此问题的任何帮助都将不胜感激

我也是这门学科的初学者,但我在这里遇到类似问题已经有一段时间了,我刚刚找到了解决办法。我希望这和你的问题一样

从我能掌握的任何信息来看,karma web服务器似乎都是为了将所有请求代理到您的web服务器而存在的。这样,您的测试就能够访问“框架”,因为karma web服务器与测试运行在同一个域上

因此,您的测试使用
browser()请求任何url该请求由karma web服务器(即
localhost:9876
)接收,该服务器将此请求代理给运行您的web应用程序的实际web服务器(即
localhost:8000
)。我不知道引擎盖下会发生什么,但不知何故,您的测试代码可以与框架一起工作。此外,在karma web服务器运行时,如果您在浏览器中手动输入
http://localhost:9876/whatever
您可以像访问
http://localhost:8000/whatever

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

在我拉扯了很多头发之后,我发现实际上发生的是我的
http://localhost:9876/whatever
url自动重定向到
http://localhost:8000/whatever/
(我仍然不知道为什么),通过重定向,测试尝试从另一个域访问帧。只需在url后面添加一个“/”,我就停止了这个重定向,我的测试就能够访问这个框架

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


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

我也是这门学科的初学者,但我在这里遇到类似问题已经有一段时间了,我刚刚找到了解决方案。我希望这和你的问题一样

从我能掌握的任何信息来看,karma web服务器似乎都是为了将所有请求代理到您的web服务器而存在的。这样,您的测试就能够访问“框架”,因为karma web服务器与测试运行在同一个域上

因此,您的测试使用
browser()请求任何url该请求由karma web服务器(即
localhost:9876
)接收,该服务器将此请求代理给运行您的web应用程序的实际web服务器(即
localhost:8000
)。我不知道引擎盖下会发生什么,但不知何故,您的测试代码可以与框架一起工作。此外,在karma web服务器运行时,如果您在浏览器中手动输入
http://localhost:9876/whatever
您可以像访问
http://localhost:8000/whatever

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

在我拉扯了很多头发之后,我发现实际上发生的是我的
http://localhost:9876/whatever
url自动重定向到
http://localhost:8000/whatever/
(我仍然不知道为什么),通过重定向,测试尝试从另一个域访问帧。只需在url后面添加一个“/”,我就停止了这个重定向,我的测试就能够访问这个框架

在您的情况下,在您的karma web服务器打开时,尝试在浏览器中手动访问所有URL(来自karma web服务器),并检查您是否始终处于访问状态
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';