【问题标题】:Testing an externally hosted app on HTTPS using Karma使用 Karma 在 HTTPS 上测试外部托管应用程序
【发布时间】:2013-09-06 10:52:43
【问题描述】:

如果您尚未使用 HTTPS,我有一个 AngularJS/Flask 应用程序(服务器端)会将您重定向到其自身的 HTTPS 版本。我想使用 Karma 来测试使用 HTTPS 的应用程序,btu 如果不在我自己的计算机上运行 HTTPS 服务器(这很麻烦),我无法在本地执行它,所以我将我的应用程序推送到 Heroku 站点(比如在mine.herokuapp.com) 具有 SSL。现在,我正在尝试使用配置文件对这个外部站点运行我的 Karma 测试

var PROXYPATH = 'mine.herokuapp.com';

files = [
    ...
];

urlRoot = '/_karma_/';
singleRun = true;
browsers = ['Chrome'];

proxies = {
    '/': PROXYPATH
};

但是当我尝试运行我的测试时,我在导航到应用程序时收到错误 Sandbox Error: Application document not accessible。我很肯定 Heroku 方面没有任何问题。我可以在那里导航。有没有办法在 Karma 中测试 HTTPS,或者我是在追逐野鹅?

【问题讨论】:

    标签: testing https karma-runner


    【解决方案1】:

    我在 IIS 中运行我的开发站点时遇到了这个问题,它会将所有 HTTP 请求重定向到 HTTPS

    我还没有开始工作,但我现在可以让它至少在 Karma 跑步者的 iframe 中加载网站

    我必须指定 主机名 并允许无效的 SSL 证书 proxyValidateSSL

    这是我的配置 (GruntJS) 格式。

    config.set({
        frameworks: [],
        files: [
            'assets/angular-scenario.js',
            'node_modules/karma-ng-scenario/lib/adapter.js',
            'tests/e2e/**/*Spec.js'],
        urlRoot: '/__e2e/',
        hostname: '10.0.0.3',
        proxyValidateSSL: false,
        proxies: {
            '/': 'https://10.0.0.3/'
        },
        browsers: ['Chrome']
    });
    

    我遇到的下一个问题是我使用 X-Frame-Options:Deny HTTP 标头来阻止外部站点将 mysite 注入到 iframe 内的站点中

    我必须将其更改为 X-Frame-Options:SameOrigin,然后我的开发站点将加载到 Chrome 中的 Karma 运行器中。

    我的问题

    然后我有以下 Jasmine 规范,navigationTo 工作正常,但它挂在 expect() 行上并且永远不会返回。

    describe('My App', function () {
        beforeEach(function () {
            browser().navigateTo('/');
        });
    
        it('should redirect to Login', function () {
            expect(browser().location().url()).toBe('/Login'); // <- Hangs here
        });
    });
    

    更新(2013 年 9 月 6 日)

    我做了一些尝试,看看我是否可以让它工作。我的应用程序使用路由,并且在删除 otherwise 路由配置后它起作用了。我仍然需要其他路线,所以我仍然不开心。但我必须有什么东西阻止它加载

    失败

        app.config(['$routeProvider', function ($routeProvider) {
    
            $routeProvider
            .when('/Foo', {
                templateUrl: 'foo.tpl.html',
                controller: 'FooCtrl',
                controllerAs: 'ctrl'
            }).otherwise({
                redirectTo: '/Foo'
            });
    
        }]);
    

    适用于

    app.config(['$routeProvider', function ($routeProvider) {
    
        $routeProvider
        .when('/Foo', {
            templateUrl: 'foo.tpl.html',
            controller: 'FooCtrl',
            controllerAs: 'ctrl'
        });
    
    }]);
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 2011-06-29
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多