Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run single e2e test with grunt and protractor

I'm assuming this is possible and actually pretty simple, but I'm new to both grunt and protractor and I was not able to find the answer online (maybe I used wrong search criteria).

I have the following e2e test in file test/e2e/Recipients.js:

describe('Recipients Tab', function() {

    beforeEach(function () {
        browser.get('#/recipients');
    });

    it('should have no e-mail list', function () {
        expect(element(by.css('accordion')).isPresent()).toBe(false);
    });
});

Currently, I'm doing this:

grunt e2e

My protractor config file:

exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',
    capabilities: {
        'browserName': 'chrome'
    },
    specs: ['../e2e/**/*.js'],
    baseUrl : 'http://localhost:8080/spr',

    jasmineNodeOpts: {
        showColors: true // Use colors in the command line report.
    }
};

Of course this runs all my tests, but while I'm developing a specific test, I don't want to run the entire battery of tests. I want to run this one file.

How can I do that? Is there any flag or something?

Thanks

like image 462
redwulf Avatar asked Apr 23 '14 09:04

redwulf


People also ask

How do you run a single test case on a protractor?

describe('Login page', function() { beforeEach(function() { browser. ignoreSynchronization = true; ptor = protractor. getInstance(); }); it('should contain navigation items', function(){ //test case code here }); it('should login the user successfully', function(){ //test case code here }) });


3 Answers

Alternatively, organize your tests as a set of test suites:

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  capabilities: { 'browserName': 'chrome' },

  suites: {
    homepage: 'tests/e2e/homepage/**/*Spec.js',
    search: ['tests/e2e/contact_search/**/*Spec.js']
  },

  jasmineNodeOpts: { showColors: true }
};

And run only specific test suites, using --suite command line argument:

protractor protractor.conf.js --suite homepage

See also: Protractor for AngularJS.

like image 143
alecxe Avatar answered Oct 19 '22 18:10

alecxe


You just have to pass the specs option to the protractor CLI. The specs option expects a comma-separated list of JS files to run.

You'll need to edit your Gruntfile.js to pass this option to protractor.

like image 45
JB Nizet Avatar answered Oct 19 '22 18:10

JB Nizet


Since you're using Grunt+Protractor, I would suggest having single tests setup not in 'protractor.conf.js' but in 'Gruntfile.js' using 'grunt-protractor-runner' Grunt module. So you can setup as many single or multiple tests as you want with different configuration

Basically, you include it at the top:

   grunt.loadNpmTasks('grunt-protractor-runner');

then, setup your task in grunt.initConfig like this:

grunt.initConfig({
.....
.....
.....
      protractor: {
      options: {
        configFile: "protractor.conf.js",
        keepAlive: true // If false, the grunt process stops when the test fails.
    },
    singleTestRun: {
        options: {
            args: {
                baseUrl: "http://yourDomain.com", // setting up base URL here
                specs: [
                    './specs/*.js',
                    './another/specs/*.js'
                ],
                capabilities: {
                    'browserName': 'chrome',
                    shardTestFiles: false
                },
            }
        }
    },
},
.....
.....
.....
});

then, register Grunt task in the same file:

grunt.registerTask('run-test', ['someTaskOne', 'protractor:singleTestRun', 'shell:someshellscript']);

and then, run this task with:

grunt run-test
like image 1
Mykola Avatar answered Oct 19 '22 20:10

Mykola