sweepy_
sweepy_

Reputation: 1331

Using Protractor with proxypass-based AngularJS app

I'm using Protractor to implement end-to-end tests on my AngularJS app using Grunt, and my app does use proxy pass to handle API calls. As a result, when running tests, API calls fail because http://localhost:9000/api is not handled.

I tried the grunt-connect-proxy plugin to handle /api proxy pass but it simply redirects (HTTP code 301) localhost:9000/api to myserver.com/api, and doesn't mimic the behaviour of a proxy pass (and the app doesn't work either).

Here's the Gruntfile configuration:

connect: {
    options: {
        port: 9000,
        hostname: 'localhost',
        base: ['<%= globals.appFolder %>/'],
        logger: 'dev',
    }
},

protractor: {
    options: {
        configFile: 'tests/e2e/protractor.config.js',
        keepAlive: true,
        noColor: false,
        args: {}
    },
    e2e: {
        options: {
           args: {}
        }
    }
}

And here's the Protractor configuration file:

exports.config =  {
    specs: ['./suites/*.js'],
    baseUrl: 'http://localhost:9000',
    maxSessions: 1,
    multiCapabilities: [{
        browserName: 'chrome'
    }],
};

How would you handle this case to let tests run on both a desktop machine, and a remote machine (such as Jenkins)?

Upvotes: 2

Views: 60

Answers (1)

sweepy_
sweepy_

Reputation: 1331

According to this issue related on grunt-connect-proxy, this is a bug occurring when dealing with HTTPS endpoints. Use the master/ version instead.

Package.json:

"grunt-connect-proxy": "https://github.com/drewzboto/grunt-connect-proxy#master",

Gruntfile:

proxies: [{
    context: '/api',
    host: 'myserver.com',
    port: 443,
    https: true
}]

Upvotes: 1

Related Questions