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.
質問
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
解決 2
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.
他のヒント
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.
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
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);
});
});