How to configure Jest spec reporter for Protractor in Angular 8? - protractor

For end-to-end testing in Angular, I would like to try out Protractor with Jest for Angular 8. In the configuration file protractor.conf.js, spec reporter of Jasmine is defined by default:
const { SpecReporter } = require('jasmine-spec-reporter');
/**
* #type { import("protractor").Config }
*/
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./src/**/*.e2e-spec.ts'
],
capabilities: {
browserName: 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
onPrepare() {
require('ts-node').register({
project: require('path').join(__dirname, './tsconfig.json')
});
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};
My question is, how can I configure similarly like this, but for Jest?

Related

Protractor tests Azure Pipelines - using Internet Explorer

We have a big set of automated tests using Protractor/Jasmine which work like a dream on Azure Pipelines. However, so far we've only used Chrome as the browser.
Now i have to run the same tests using Internet Explorer (11) but am getting no joy at all!!
Here's a part of my conf.js file that deals with the browser:
var HtmlReporter = require('protractor-beautiful-reporter');
var {SpecReporter} = require("jasmine-spec-reporter");
var jasmineReporters = require("jasmine-reporters");
exports.config = {
//seleniumAddress: `http://localhost:4444/wd/hub`,
framework: "jasmine2",
specs: ['specs/secureTrading/01_SecureTrading.js',
'specs/secureTrading/02_ST_Payments.js'
],
getPageTimeout: 40000,
allScriptsTimeout: 60000,
capabilities: {
'browserName': 'internet explorer',
'ignoreProtectedModeSettings': true,
'platform': 'ANY',
'version': '11',
args: ['--silent', '--no-sandbox', '--test-type=browser', '--lang=US', '--start-maximized'], //,'--headless', '--disable-gpu'
prefs: {
'download': {
'prompt_for_download': false,
'directory_upgrade': true,
'extensions_to_open': '',
'default_directory': process.cwd() + '/downloads/'
},
}
},
localSeleniumStandaloneOpts: {
jvmArgs: [
'-Dwebdriver.ie.driver=node_modules/protractor/node_modules/webdriver-manager/selenium/IEDriverServer3.14.0.exe'
]
},
directConnect: false,
seleniumArgs: ['-Dwebdriver.ie.driver=node_modules/protractor/node_modules/webdriver-manager/selenium/IEDriverServer3.14.0.exe'],
ignoreUncaughtExceptions: true,
onPrepare: function() {
Having looked at other postings, I've tried removing // from seleniumAddress:http://localhost:4444/wd/hub,` still errors, Changing DirectConnect makes no difference.
With the settings as above, this is the error message.
Any advice please?
Thanks
Additional Logs as per comment below.
Local:

Set jasmine default timeout interval inside karma config file

My karma file looks like the following, I have around 900 test cases & some of them fail due to default timeout being set to 5000ms. I tried adding the following but it did not make a difference (same error, karma thinks the default value is still 5000ms):
jasmineNodeOpts: {
defaultTimeoutInterval: 50000
}
How can I fix this issue?
Karma file:
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['parallel', 'jasmine', '#angular-devkit/build-angular'],
plugins: [
require('karma-parallel'),
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('#angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, 'coverage'), reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: true,
browserNoActivityTimeout: 60000,
parallelOptions: {
executors: Math.min(Math.ceil(require('os').cpus().length / 2), 6)
}
});
};
Since karma-jasmine version 2.0 you can now pass timeoutInverval directly in the config:
module.exports = function(config) {
config.set({
client: {
jasmine: {
timeoutInterval: 50000
}
}
})
}

unable to generate allure report for protractor cucumber

I'm trying to generate allure report for protractor cucumber but it is not generating any report.
conf.js is as below
exports.config = {
directConnect: true,
capabilities: {
browserName: 'chrome',
},
framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
specs: [
'sample.feature'
],
restartBrowserBetweenTests: true,
cucumberOpts: {
require:[
'sampleStep.js',
'reporter.js'
],
},
onPrepare: function () {
browser.manage().window().maximize();
},
};
and the reporter.js file is
var reporter = require('cucumberjs-allure-reporter');
reporter.config(
//targetDir:'./allure-results/'
{ targetDir : './Reports'}
);
module.exports = reporter;
The cucumberjs-allure-reporter library doesn't support higher Cucumber (I can't remember the exact version, maybe only supports Cucumber 2 and lower).
You can try this new library, cucumberjs-allure2-reporter, which is compatible with Cucumber.JS 3+ and Allure 2+.

How to pass arguments by command line for multicapabilities on protractor?

I need to pass headless arguments by command line.
In the begining I was working just with Chrome and I was using the following code to pass these arguments:
./node_modules/.bin/protractor "conf.js" --capabilities.chromeOptions.args=headless --capabilities.chromeOptions.args=disable-gpu --capabilities.chromeOptions.args=window-size=1248,1024
This is working properly, the problem is when I added firefox capabilities.
The qwestion: How can I pass this "headless" argument by command line with multiCapabilities?
I tried with:
./node_modules/.bin/protractor "conf.js" --multiCapabilities.1.chromeOptions.args=headless --multiCapabilities.1.chromeOptions.args=disable-gpu --multiCapabilities.1.chromeOptions.args=window-size=1248,1024 --multiCapabilities.0.moz:firefoxOptions=headless
But didn't work.
My config file:
exports.config = {
onPrepare: async function () {
console.log("Let's Start")
},
seleniumAddress: 'http://localhost:4444/wd/hub',
getPageTimeout: 100000,
allScriptsTimeout: 100000,
restartBrowserBetweenTests: true,
maxSessions: 2,
multiCapabilities: [{
browserName: 'firefox',
parallelCapability: false,
marionette: true,
"moz:firefoxOptions":{
//args: [ "--headless" ],
prefs:{
'pdfjs.disabled': true
}
},
'safebrowsing': {
'enabled': true,
}
}
,{
browserName: 'chrome',
parallelCapability: false,
'chromeOptions': {
prefs: {
download: {
'prompt_for_download': false,
'directory_upgrade': true,
'default_directory': process.cwd() + '/download/'
},
'safebrowsing': {
'enabled': true,
}
}
},
},
],
framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
specs: [
'features/happyPath.feature'
],
cucumberOpts: {
require: [
'features/step_definitions/**/*.js',
'lib/hooks.js'],
profile: false,
'no-source': true
}
};
You have to specify the browser name
--multiCapabilities.0.browserName chrome
--multiCapabilities.1.browserName firefox

Protractor resolves promises with Chrome, but not Phantom

When running end to end tests with Protractor, I'm seeing promises in my tests being resolved when run with Chrome. But when run with Phantom, the callbacks are never executed, and the test eventually times out with the message Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
My protractor.config.js file looks like:
exports.config = {
baseUrl: 'http://localhost:3000/',
suites: {
// ...
},
directConnect: !(process.env.NODE_ENV === 'CI'),
exclude: [],
multiCapabilities: [{
browserName: process.env.NODE_ENV === 'CI' ? 'phantomjs' : 'chrome',
'phantomjs.cli.args': ['--web-security=false',
'--ignore-ssl-errors=true'
]
}],
allScriptsTimeout: 110000,
getPageTimeout: 100000,
framework: 'jasmine2',
jasmineNodeOpts: {
isVerbose: false,
showColors: true,
includeStackTrace: false,
defaultTimeoutInterval: 400000,
print: function() {}
},
}
With this configuration, a test like the following will execute its callback for Chrome, but not for Phantom:
let targetUrl = '/foo';
it ('should resolve the route properly', function (done) {
browser.getCurrentUrl().then(function (url) {
console.log("****"); // This is printed in Chrome, but not Phantom
expect(url).toContain(targetUrl);
done();
})});
Node Modules Versions
Protractor: 5.0.0
Phantom: 4.0.0
PhantomJS 2.1.7
PhantomJS-prebuilt: 2.1.14
Webdriver Manager (inside Protractor): 11.1.1
Any ideas?