7

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

alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195
redwulf
  • 1,317
  • 3
  • 13
  • 35
  • What does your protractor.conf.js look like? Please edit it into your original question – Tim Apr 23 '14 at 09:30
  • You can use the `specs` protractor option to pass a comma-separated list of JS files to execute. You'll need to edit your Gruntfile.js to pass this option to protractor – JB Nizet Apr 23 '14 at 09:38
  • JB Nizet, I just tried that and it works. Thanks. Want to write an answer I can accept instead? – redwulf Apr 23 '14 at 10:39

4 Answers4

9

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.

alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195
8

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.

JB Nizet
  • 678,734
  • 91
  • 1,224
  • 1,255
1

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
Mykola
  • 352
  • 1
  • 9
0

You just prefixed x before the describe which you no need to run. For exanple if you do not need to run the test suit use as follows ,

xdescribe('Recipients Tab', function() {

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

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

});

Dinesh ML
  • 921
  • 11
  • 15
  • 1
    Didn't know about this and it's useful, but as I understand it, everytime I want to test something different, I need to add the x in all other specs. I wanted something similar to what maven does: mvn -Dtest=com.project.MyTestClass test – redwulf Apr 23 '14 at 10:20
  • @redwulf did you find anything in protractor with grunt to execute single test like mvn does? Appreciate your help! – rohitkadam19 Sep 11 '15 at 21:38