MM-28653 Detox/E2E: Add jest-junit, jest-html-reporters and pathbuilders for test report/artifacts (#4888)

* add jest-junit, jest-html-reporters and pathbuilders for test report/artifacts

* change optional chaining implementation
This commit is contained in:
Saturnino Abril 2020-10-15 02:27:57 +08:00 committed by GitHub
parent 52f6f1dce8
commit 6e2549de7f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 139 additions and 12 deletions

1
.gitignore vendored
View file

@ -92,6 +92,7 @@ coverage
# E2E testing
mattermost-license.txt
*.mattermost-license
detox/artifacts
# Bundle artifact
*.jsbundle

View file

@ -1,6 +1,6 @@
{
"testRunner": "jest",
"runnerConfig": "e2e/config.json",
"runnerConfig": "e2e/config.js",
"configurations": {
"ios.sim.debug": {
"binaryPath": "../ios/Build/Products/Debug-iphonesimulator/Mattermost.app",
@ -34,6 +34,9 @@
}
}
},
"artifacts": {
"pathBuilder": "./e2e/path_builder.js"
},
"behavior": {
"init": {
"launchApp": false

28
detox/e2e/config.js Normal file
View file

@ -0,0 +1,28 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
const platform = process.env.IOS ? 'ios' : 'android';
module.exports = {
setupFilesAfterEnv: ['./init.js'],
testEnvironment: './environment',
testRunner: 'jest-circus/runner',
testTimeout: 120000,
testRegex: '\\.e2e\\.js$',
reporters: [
'../node_modules/detox/runners/jest/streamlineReporter',
['jest-junit', {
suiteName: 'Mobile App E2E with Detox and Jest',
outputDirectory: './artifacts',
outputName: `${platform}-junit.xml`,
uniqueOutputName: false,
}],
['jest-html-reporters', {
pageTitle: 'Mobile App E2E with Detox and Jest',
publicPath: './artifacts',
filename: `${platform}-report.html`,
expand: false,
}],
],
verbose: true,
};

View file

@ -1,9 +0,0 @@
{
"setupFilesAfterEnv" : ["./init.js"],
"testEnvironment": "./environment",
"testRunner": "jest-circus/runner",
"testTimeout": 120000,
"testRegex": "\\.e2e\\.js$",
"reporters": ["detox/runners/jest/streamlineReporter"],
"verbose": true
}

24
detox/e2e/path_builder.js Normal file
View file

@ -0,0 +1,24 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
const path = require('path');
const sanitizeFilename = require('sanitize-filename');
const SANITIZE_OPTIONS = {replacement: '_'};
const sanitize = (filename) => sanitizeFilename(filename, SANITIZE_OPTIONS);
class CustomPathBuilder {
constructor({rootDir}) {
this.rootDir = rootDir;
}
buildPathForTestArtifact(artifactName, testSummary = null) {
const fullName = (testSummary && testSummary.fullName) || '';
const segments = [this.rootDir, sanitize(fullName), sanitize(artifactName)];
return path.join(...segments.filter(Boolean));
}
}
module.exports = ({rootDir}) => {
return new CustomPathBuilder({rootDir});
};

View file

@ -1868,6 +1868,12 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
"at-least-node": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
"dev": true
},
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@ -4261,6 +4267,45 @@
"walker": "^1.0.7"
}
},
"jest-html-reporters": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/jest-html-reporters/-/jest-html-reporters-2.1.0.tgz",
"integrity": "sha512-1RAyEtvfpHHv4pbrl4Y7Vm777ucHkTH2G0Rvpo9M9/ew2TwPqhvEi37IoTLf+gdelDxaS0QqyH89+9lO6omAcA==",
"dev": true,
"requires": {
"fs-extra": "^9.0.1"
},
"dependencies": {
"fs-extra": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
"integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
"dev": true,
"requires": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^1.0.0"
}
},
"jsonfile": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
"integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^1.0.0"
}
},
"universalify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
"integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
"dev": true
}
}
},
"jest-jasmine2": {
"version": "26.4.2",
"resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.4.2.tgz",
@ -4339,6 +4384,32 @@
}
}
},
"jest-junit": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-12.0.0.tgz",
"integrity": "sha512-+8K35LlboWiPuCnXSyiid7rFdxNlpCWWM20WEYe6IZH6psfUWKZmSpSRQ5tk0C0cBeDsvsnIzcef5mYhyJsbug==",
"dev": true,
"requires": {
"mkdirp": "^1.0.4",
"strip-ansi": "^5.2.0",
"uuid": "^3.3.3",
"xml": "^1.0.1"
},
"dependencies": {
"mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true
},
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
"dev": true
}
}
},
"jest-leak-detector": {
"version": "26.4.2",
"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.4.2.tgz",
@ -7492,6 +7563,12 @@
"ultron": "~1.1.0"
}
},
"xml": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
"integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=",
"dev": true
},
"xml-name-validator": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",

View file

@ -16,6 +16,9 @@
"jest": "26.4.2",
"jest-circus": "26.4.2",
"jest-cli": "26.4.2",
"jest-html-reporters": "2.1.0",
"jest-junit": "12.0.0",
"sanitize-filename": "1.6.3",
"uuid": "8.3.0"
},
"scripts": {
@ -23,10 +26,10 @@
"e2e:android-build": "detox build -c android.emu.debug",
"e2e:android-test": "detox test -c android.emu.debug",
"e2e:android-build-release": "detox build -c android.emu.release",
"e2e:android-test-release": "detox test -c android.emu.release",
"e2e:android-test-release": "detox test -c android.emu.release --record-logs failing --take-screenshots failing",
"e2e:ios-test": "IOS=true detox test -c ios.sim.debug",
"e2e:ios-build-release": "detox build -c ios.sim.release",
"e2e:ios-test-release": "IOS=true detox test -c ios.sim.release"
"e2e:ios-test-release": "IOS=true detox test -c ios.sim.release --record-logs failing --take-screenshots failing"
},
"jest": {
"transform": {