使用Karma在HTTPS上测试外部托管的应用程序

时间:2013-08-07 18:16:11

标签: testing https karma-runner

我有一个AngularJS / Flask应用程序(服务器端)如果您尚未使用HTTPS,则会将您重定向到自己的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,还是我在疯狂追逐?

1 个答案:

答案 0 :(得分:2)

我在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:拒绝 HTTP标头来阻止外部网站在iframe中的网站中注入mysite

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

我的问题

然后我有以下Jasmine规范,navigateTo工作正常,但它挂在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日)

我做了一些游戏,看看能否让它发挥作用。我的应用程序使用路由,并在删除否则路由配置后,它工作。我仍然需要其他路线,所以我还是不开心。但是我必须要有一些东西阻止它加载

失败
    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'
    });

}]);