ember-exam 6.0.0 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -0
- package/README.md +2 -3
- package/addon-test-support/-private/async-iterator.js +6 -10
- package/addon-test-support/-private/ember-exam-mocha-test-loader.js +2 -2
- package/addon-test-support/-private/ember-exam-qunit-test-loader.js +8 -3
- package/addon-test-support/-private/filter-test-modules.js +31 -13
- package/addon-test-support/-private/get-test-loader.js +13 -5
- package/addon-test-support/-private/split-test-modules.js +2 -2
- package/addon-test-support/-private/weight-test-modules.js +1 -1
- package/addon-test-support/start.js +6 -2
- package/index.js +32 -1
- package/lib/commands/exam/iterate.js +12 -14
- package/lib/commands/exam.js +83 -66
- package/lib/commands/index.js +1 -1
- package/lib/commands/task/test-server.js +1 -1
- package/lib/commands/task/test.js +1 -1
- package/lib/utils/config-reader.js +4 -1
- package/lib/utils/execution-state-manager.js +30 -17
- package/lib/utils/file-system-helper.js +7 -3
- package/lib/utils/query-helper.js +1 -1
- package/lib/utils/test-page-helper.js +12 -12
- package/lib/utils/testem-events.js +70 -26
- package/lib/utils/tests-options-validator.js +2 -7
- package/package.json +46 -20
- package/.codeclimate.yml +0 -20
- package/CONTRIBUTING.md +0 -27
- package/RELEASE.md +0 -60
- package/addon-test-support/.eslintrc +0 -6
- package/bin/install-test-framework.sh +0 -5
- package/config/deploy.js +0 -29
- package/config/environment.js +0 -5
- package/lib/.eslintrc +0 -5
- package/node-tests/.eslintrc +0 -8
- package/node-tests/acceptance/exam-iterate-test.js +0 -176
- package/node-tests/acceptance/exam-test.js +0 -612
- package/node-tests/fixtures/browser-exit.js +0 -12
- package/node-tests/fixtures/failure.js +0 -1
- package/node-tests/fixtures/test-helper-with-load.js +0 -23
- package/node-tests/unit/commands/exam-test.js +0 -180
- package/node-tests/unit/lint-test.js +0 -5
- package/node-tests/unit/utils/config-reader-test.js +0 -68
- package/node-tests/unit/utils/execution-state-manager-test.js +0 -205
- package/node-tests/unit/utils/query-helper-test.js +0 -58
- package/node-tests/unit/utils/test-page-helper-test.js +0 -338
- package/node-tests/unit/utils/testem-events-test.js +0 -457
- package/node-tests/unit/utils/tests-options-validator-test.js +0 -418
- package/testem.multiple-test-page.js +0 -23
- package/testem.no-test-page.js +0 -19
- package/testem.simple-test-page.js +0 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,67 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v7.0.1 (2021-11-02)
|
|
4
|
+
#### :bug: Bug Fix
|
|
5
|
+
* [#760](https://github.com/ember-cli/ember-exam/pull/760) Wait for all browser to completet beforer cleaning up StateManager([@step2yeung](https://github.com/step2yeung))
|
|
6
|
+
* [#750](https://github.com/ember-cli/ember-exam/pull/750) Ember exam failing when browser ID not found, return 0([@step2yeung](https://github.com/step2yeung))
|
|
7
|
+
|
|
8
|
+
#### :house: Internal
|
|
9
|
+
* [#748](https://github.com/ember-cli/ember-exam/pull/748) Add eslint-plugin-qunit per latest addon blueprint internal ([@SergeAstapov](https://github.com/SergeAstapov))
|
|
10
|
+
* [#744](https://github.com/ember-cli/ember-exam/pull/744) Update npmignore file internal([@Turbo87](https://github.com/Turbo87))
|
|
11
|
+
#### Committers: 4
|
|
12
|
+
|
|
13
|
+
- Sergey Astapov ([@SergeAstapov](https://github.com/SergeAstapov))
|
|
14
|
+
- Tobias Bieniek ([@Turbo87](https://github.com/Turbo87))
|
|
15
|
+
- Stephen Yeung ([@step2yeung](https://github.com/step2yeung))
|
|
16
|
+
|
|
17
|
+
## v7.0.0 (2021-10-22)
|
|
18
|
+
|
|
19
|
+
#### :boom: Breaking Change
|
|
20
|
+
* [#739](https://github.com/ember-cli/ember-exam/pull/739) Update `ember-auto-import` to v2.x ([@Turbo87](https://github.com/Turbo87))
|
|
21
|
+
* [#690](https://github.com/ember-cli/ember-exam/pull/690) Drop support for Node 10 and upgrade deps ([@nlfurniss](https://github.com/nlfurniss))
|
|
22
|
+
|
|
23
|
+
#### :bug: Bug Fix
|
|
24
|
+
* [#688](https://github.com/ember-cli/ember-exam/pull/688) Fix embroider tests ([@nlfurniss](https://github.com/nlfurniss))
|
|
25
|
+
|
|
26
|
+
#### :memo: Documentation
|
|
27
|
+
* [#687](https://github.com/ember-cli/ember-exam/pull/687) Update README.md: Fix typo in flag name ([@bantic](https://github.com/bantic))
|
|
28
|
+
* [#644](https://github.com/ember-cli/ember-exam/pull/644) Docs: Fix information on Load Balancing ([@brkn](https://github.com/brkn))
|
|
29
|
+
|
|
30
|
+
#### :house: Internal
|
|
31
|
+
* [#743](https://github.com/ember-cli/ember-exam/pull/743) CI: Add `release` workflow ([@Turbo87](https://github.com/Turbo87))
|
|
32
|
+
* [#737](https://github.com/ember-cli/ember-exam/pull/737) Use `prettier` to format JS files ([@Turbo87](https://github.com/Turbo87))
|
|
33
|
+
* [#736](https://github.com/ember-cli/ember-exam/pull/736) CI: Disable Ember.js v4 scenarios ([@Turbo87](https://github.com/Turbo87))
|
|
34
|
+
* [#689](https://github.com/ember-cli/ember-exam/pull/689) Set ember edition to Octane to quiet build logging ([@nlfurniss](https://github.com/nlfurniss))
|
|
35
|
+
|
|
36
|
+
#### Committers: 4
|
|
37
|
+
- Berkan Ünal ([@brkn](https://github.com/brkn))
|
|
38
|
+
- Cory Forsyth ([@bantic](https://github.com/bantic))
|
|
39
|
+
- Nathaniel Furniss ([@nlfurniss](https://github.com/nlfurniss))
|
|
40
|
+
- Tobias Bieniek ([@Turbo87](https://github.com/Turbo87))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
## v6.1.0 (2021-02-17)
|
|
44
|
+
|
|
45
|
+
#### :rocket: Enhancement
|
|
46
|
+
* [#652](https://github.com/ember-cli/ember-exam/pull/652) Update to support `ember-qunit@5` ([@thoov](https://github.com/thoov))
|
|
47
|
+
|
|
48
|
+
#### Committers: 1
|
|
49
|
+
- Travis Hoover ([@thoov](https://github.com/thoov))
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## v6.0.1 (2020-10-28)
|
|
53
|
+
|
|
54
|
+
#### :bug: Bug Fix
|
|
55
|
+
* [#617](https://github.com/ember-cli/ember-exam/pull/617) Update @embroider/macros to fix ember-qunit@5.0.0-beta support. ([@rwjblue](https://github.com/rwjblue))
|
|
56
|
+
|
|
57
|
+
#### :house: Internal
|
|
58
|
+
* [#618](https://github.com/ember-cli/ember-exam/pull/618) Swap to GitHub actions for CI. ([@rwjblue](https://github.com/rwjblue))
|
|
59
|
+
|
|
60
|
+
#### Committers: 2
|
|
61
|
+
- Robert Jackson ([@rwjblue](https://github.com/rwjblue))
|
|
62
|
+
- [@dependabot-preview[bot]](https://github.com/apps/dependabot-preview)
|
|
63
|
+
|
|
64
|
+
|
|
1
65
|
## v6.0.0 (2020-10-12)
|
|
2
66
|
|
|
3
67
|
#### :boom: Breaking Change
|
package/README.md
CHANGED
|
@@ -302,7 +302,7 @@ You can also specify the `split` and `partition` options with `load-balance` to
|
|
|
302
302
|
$ ember exam --split=<num> --partition=<num> --parallel=<num> --load-balance
|
|
303
303
|
```
|
|
304
304
|
|
|
305
|
-
This command will split test files and load-balance tests from the specified partition across the browsers. For example `ember exam --split=2
|
|
305
|
+
This command will split test files and load-balance tests from the specified partition across the browsers. For example `ember exam --split=2 --partition=1 --parallel=3 --load-balance`, the complete list of test files are split into two halves. With the first half of the list load balanced against three browsers. The output will look something like below:
|
|
306
306
|
|
|
307
307
|
```bash
|
|
308
308
|
# ember exam --split=2 --partition=1 --parallel=3 --load-balance
|
|
@@ -317,9 +317,8 @@ ok 3 Chrome 66.0 - Exam Partition 1 - browser Id 3 - some the other test
|
|
|
317
317
|
1. The `--load-balance` option is currently only supported in CI mode and for that reason no-launch cannot be used with load-balance.
|
|
318
318
|
2. You must be using `ember-cli` version 3.2.0 or greater for load balancing and test failure reproduction features to work properly.
|
|
319
319
|
3. You must be using `ember-qunit` version 4.1.1 or greater for this feature to work properly.
|
|
320
|
-
4. You must be using `qunit` version 2.
|
|
320
|
+
4. You must be using `qunit` version 2.13.0 or greater for this feature to work properly.
|
|
321
321
|
5. This feature is not currently supported by Mocha.
|
|
322
|
-
6. `--random[=<seed>]` does not (currently) work with load balancing. This will be fixed once https://github.com/qunitjs/qunit/pull/1417 lands.
|
|
323
322
|
|
|
324
323
|
##### Test Failure Reproduction
|
|
325
324
|
|
|
@@ -39,9 +39,7 @@ export default class AsyncIterator {
|
|
|
39
39
|
* @return {String} the stringified value of the iterator.
|
|
40
40
|
*/
|
|
41
41
|
toString() {
|
|
42
|
-
return `<AsyncIterator (request: ${this._request} response: ${
|
|
43
|
-
this._response
|
|
44
|
-
})>`;
|
|
42
|
+
return `<AsyncIterator (request: ${this._request} response: ${this._response})>`;
|
|
45
43
|
}
|
|
46
44
|
|
|
47
45
|
/**
|
|
@@ -113,16 +111,14 @@ export default class AsyncIterator {
|
|
|
113
111
|
|
|
114
112
|
if (this._emberExamExitOnError) {
|
|
115
113
|
let err = new Error(
|
|
116
|
-
`EmberExam: Promise timed out after ${
|
|
117
|
-
this._timeout
|
|
118
|
-
} s while waiting for response for ${this._request}`
|
|
114
|
+
`EmberExam: Promise timed out after ${this._timeout} s while waiting for response for ${this._request}`
|
|
119
115
|
);
|
|
120
116
|
reject(err);
|
|
121
117
|
} else {
|
|
122
118
|
// eslint-disable-next-line no-console
|
|
123
|
-
console.error(
|
|
124
|
-
this._timeout
|
|
125
|
-
|
|
119
|
+
console.error(
|
|
120
|
+
`EmberExam: Promise timed out after ${this._timeout} s while waiting for response for ${this._request}. Closing browser to exit gracefully.`
|
|
121
|
+
);
|
|
126
122
|
resolve(iteratorCompleteResponse);
|
|
127
123
|
}
|
|
128
124
|
}, this._timeout * 1000);
|
|
@@ -153,7 +149,7 @@ export default class AsyncIterator {
|
|
|
153
149
|
this._current = {
|
|
154
150
|
resolve,
|
|
155
151
|
reject,
|
|
156
|
-
promise
|
|
152
|
+
promise,
|
|
157
153
|
};
|
|
158
154
|
|
|
159
155
|
this._makeNextRequest();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import getUrlParams from './get-url-params';
|
|
2
2
|
import splitTestModules from './split-test-modules';
|
|
3
|
-
import { filterTestModules} from './filter-test-modules';
|
|
3
|
+
import { filterTestModules } from './filter-test-modules';
|
|
4
4
|
import { TestLoader } from 'ember-mocha/test-loader';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -28,7 +28,7 @@ export default class EmberExamMochaTestLoader extends TestLoader {
|
|
|
28
28
|
* @method load
|
|
29
29
|
*/
|
|
30
30
|
static load() {
|
|
31
|
-
throw new Error(
|
|
31
|
+
throw new Error("`EmberExamMochaTestLoader` doesn't support `load()`.");
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
@@ -33,7 +33,7 @@ export default class EmberExamQUnitTestLoader extends TestLoader {
|
|
|
33
33
|
* @method load
|
|
34
34
|
*/
|
|
35
35
|
static load() {
|
|
36
|
-
throw new Error(
|
|
36
|
+
throw new Error("`EmberExamQUnitTestLoader` doesn't support `load()`.");
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
@@ -178,8 +178,13 @@ export default class EmberExamQUnitTestLoader extends TestLoader {
|
|
|
178
178
|
return nextModuleHandler();
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
|
-
})
|
|
182
|
-
|
|
181
|
+
})
|
|
182
|
+
.catch((e) => {
|
|
183
|
+
if (
|
|
184
|
+
typeof e === 'object' &&
|
|
185
|
+
e !== null &&
|
|
186
|
+
typeof e.message === 'string'
|
|
187
|
+
) {
|
|
183
188
|
e.message = `EmberExam: Failed to get next test module: ${e.message}`;
|
|
184
189
|
}
|
|
185
190
|
throw new Error(`EmberExam: Failed to get next test module: ${e}`);
|
|
@@ -10,7 +10,7 @@ const TEST_PATH_REGEX = /\/tests\/(.*?)$/;
|
|
|
10
10
|
* @param {*} modulePath
|
|
11
11
|
*/
|
|
12
12
|
function getRegexFilter(modulePath) {
|
|
13
|
-
return MODULE_PATH_REGEXP.exec(
|
|
13
|
+
return MODULE_PATH_REGEXP.exec(modulePath);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -23,7 +23,11 @@ function getRegexFilter(modulePath) {
|
|
|
23
23
|
*/
|
|
24
24
|
function wildcardFilter(module, moduleFilter) {
|
|
25
25
|
// Generate a regular expression to handle wildcard from path filter
|
|
26
|
-
const moduleFilterRule = [
|
|
26
|
+
const moduleFilterRule = [
|
|
27
|
+
'^.*',
|
|
28
|
+
moduleFilter.split('*').join('.*'),
|
|
29
|
+
'$',
|
|
30
|
+
].join('');
|
|
27
31
|
return new RegExp(moduleFilterRule).test(module);
|
|
28
32
|
}
|
|
29
33
|
|
|
@@ -35,7 +39,10 @@ function wildcardFilter(module, moduleFilter) {
|
|
|
35
39
|
* @param {string} moduleFilter
|
|
36
40
|
*/
|
|
37
41
|
function stringFilter(modules, moduleFilter) {
|
|
38
|
-
return modules.filter(
|
|
42
|
+
return modules.filter(
|
|
43
|
+
(module) =>
|
|
44
|
+
module.includes(moduleFilter) || wildcardFilter(module, moduleFilter)
|
|
45
|
+
);
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
/**
|
|
@@ -49,7 +56,9 @@ function regexFilter(modules, modulePathRegexFilter) {
|
|
|
49
56
|
const re = new RegExp(modulePathRegexFilter[2], modulePathRegexFilter[3]);
|
|
50
57
|
const exclude = modulePathRegexFilter[1];
|
|
51
58
|
|
|
52
|
-
return modules.filter(
|
|
59
|
+
return modules.filter(
|
|
60
|
+
(module) => (!exclude && re.test(module)) || (exclude && !re.test(module))
|
|
61
|
+
);
|
|
53
62
|
}
|
|
54
63
|
|
|
55
64
|
/**
|
|
@@ -60,7 +69,7 @@ function regexFilter(modules, modulePathRegexFilter) {
|
|
|
60
69
|
*/
|
|
61
70
|
function convertFilePathToModulePath(filePath) {
|
|
62
71
|
const filePathWithNoExtension = filePath.replace(/\.[^/.]+$/, '');
|
|
63
|
-
const testFilePathMatch =
|
|
72
|
+
const testFilePathMatch = TEST_PATH_REGEX.exec(filePathWithNoExtension);
|
|
64
73
|
if (typeof filePath !== 'undefined' && testFilePathMatch !== null) {
|
|
65
74
|
return testFilePathMatch[0];
|
|
66
75
|
}
|
|
@@ -78,26 +87,35 @@ function convertFilePathToModulePath(filePath) {
|
|
|
78
87
|
*/
|
|
79
88
|
function filterTestModules(modules, modulePath, filePath) {
|
|
80
89
|
// Generates an array with module filter value seperated by comma (,).
|
|
81
|
-
const moduleFilters = (filePath || modulePath)
|
|
90
|
+
const moduleFilters = (filePath || modulePath)
|
|
91
|
+
.split(',')
|
|
92
|
+
.map((value) => value.trim());
|
|
82
93
|
|
|
83
94
|
const filteredTestModules = moduleFilters.reduce((result, moduleFilter) => {
|
|
84
95
|
const modulePath = convertFilePathToModulePath(moduleFilter);
|
|
85
96
|
const modulePathRegex = getRegexFilter(modulePath);
|
|
86
97
|
|
|
87
98
|
if (modulePathRegex) {
|
|
88
|
-
return result.concat(
|
|
99
|
+
return result.concat(
|
|
100
|
+
regexFilter(modules, modulePathRegex).filter(
|
|
101
|
+
(module) => result.indexOf(module) === -1
|
|
102
|
+
)
|
|
103
|
+
);
|
|
89
104
|
} else {
|
|
90
|
-
return result.concat(
|
|
105
|
+
return result.concat(
|
|
106
|
+
stringFilter(modules, modulePath).filter(
|
|
107
|
+
(module) => result.indexOf(module) === -1
|
|
108
|
+
)
|
|
109
|
+
);
|
|
91
110
|
}
|
|
92
111
|
}, []);
|
|
93
112
|
|
|
94
113
|
if (filteredTestModules.length === 0) {
|
|
95
|
-
throw new Error(
|
|
114
|
+
throw new Error(
|
|
115
|
+
`No tests matched with the filter: ${modulePath || filePath}.`
|
|
116
|
+
);
|
|
96
117
|
}
|
|
97
118
|
return filteredTestModules;
|
|
98
119
|
}
|
|
99
120
|
|
|
100
|
-
export {
|
|
101
|
-
convertFilePathToModulePath,
|
|
102
|
-
filterTestModules
|
|
103
|
-
}
|
|
121
|
+
export { convertFilePathToModulePath, filterTestModules };
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
dependencySatisfies,
|
|
3
|
+
macroCondition,
|
|
4
|
+
importSync,
|
|
5
|
+
} from '@embroider/macros';
|
|
2
6
|
|
|
3
7
|
/**
|
|
4
8
|
* Returns ember-exam-qunit-test-loader or ember-exam-mocha-test-loader
|
|
@@ -8,11 +12,15 @@ import { dependencySatisfies, macroCondition, importSync } from '@embroider/macr
|
|
|
8
12
|
* @return {Object}
|
|
9
13
|
*/
|
|
10
14
|
export default function getTestLoader() {
|
|
11
|
-
if (macroCondition(dependencySatisfies('ember-qunit', '*'))){
|
|
12
|
-
const EmberExamQUnitTestLoader = importSync(
|
|
15
|
+
if (macroCondition(dependencySatisfies('ember-qunit', '*'))) {
|
|
16
|
+
const EmberExamQUnitTestLoader = importSync(
|
|
17
|
+
'./ember-exam-qunit-test-loader'
|
|
18
|
+
);
|
|
13
19
|
return EmberExamQUnitTestLoader['default'];
|
|
14
|
-
} else if (macroCondition(dependencySatisfies('ember-mocha', '*'))){
|
|
15
|
-
const EmberExamMochaTestLoader = importSync(
|
|
20
|
+
} else if (macroCondition(dependencySatisfies('ember-mocha', '*'))) {
|
|
21
|
+
const EmberExamMochaTestLoader = importSync(
|
|
22
|
+
'./ember-exam-mocha-test-loader'
|
|
23
|
+
);
|
|
16
24
|
return EmberExamMochaTestLoader['default'];
|
|
17
25
|
}
|
|
18
26
|
|
|
@@ -51,9 +51,9 @@ export default function splitTestModules(modules, split, partitions) {
|
|
|
51
51
|
const partition = parseInt(partitions[i], 10);
|
|
52
52
|
if (isNaN(partition)) {
|
|
53
53
|
throw new Error(
|
|
54
|
-
|
|
54
|
+
"You must specify numbers for partition (you specified '" +
|
|
55
55
|
partitions +
|
|
56
|
-
'
|
|
56
|
+
"')"
|
|
57
57
|
);
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import loadEmberExam from 'ember-exam/test-support/load';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
dependencySatisfies,
|
|
4
|
+
macroCondition,
|
|
5
|
+
importSync,
|
|
6
|
+
} from '@embroider/macros';
|
|
3
7
|
|
|
4
8
|
/**
|
|
5
9
|
* Equivalent to ember-qunit or ember-mocha's loadTest() except this does not create a new TestLoader instance
|
|
@@ -32,7 +36,7 @@ export default function start(qunitOptions) {
|
|
|
32
36
|
loadTests(testLoader);
|
|
33
37
|
|
|
34
38
|
let emberTestFramework;
|
|
35
|
-
if (macroCondition(dependencySatisfies('ember-qunit', '*'))){
|
|
39
|
+
if (macroCondition(dependencySatisfies('ember-qunit', '*'))) {
|
|
36
40
|
emberTestFramework = importSync('ember-qunit');
|
|
37
41
|
} else if (macroCondition(dependencySatisfies('ember-mocha', '*'))) {
|
|
38
42
|
emberTestFramework = importSync('ember-mocha');
|
package/index.js
CHANGED
|
@@ -2,10 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
5
|
+
const VersionChecker = require('ember-cli-version-checker');
|
|
6
|
+
|
|
5
7
|
module.exports = {
|
|
6
8
|
name: require('./package').name,
|
|
7
9
|
|
|
8
10
|
includedCommands() {
|
|
9
11
|
return require('./lib/commands');
|
|
10
|
-
}
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
init() {
|
|
15
|
+
this._super.init.apply(this, arguments);
|
|
16
|
+
let versionChecker = new VersionChecker(this.project);
|
|
17
|
+
|
|
18
|
+
const hasMagicallyProvidedQUnit = versionChecker
|
|
19
|
+
.for('ember-qunit')
|
|
20
|
+
.lt('5.0.0-beta.1');
|
|
21
|
+
|
|
22
|
+
let options = {
|
|
23
|
+
exclude: ['ember-mocha', 'mocha'],
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// Ember-qunit < 5 provides an AMD shim for qunit but newer versions now use
|
|
27
|
+
// ember-auto-import to include qunit. This means that qunit is no
|
|
28
|
+
// longer available for addons (if the parent app is using ember-qunit > 5) to
|
|
29
|
+
// directly import under embroider unless they are using ember-auto-import
|
|
30
|
+
// themselves. This condidionally falls back to not using ember-auto-import
|
|
31
|
+
// when the parent app is providing qunit because without this we would double
|
|
32
|
+
// include qunit resulting in a runtime error (qunit detects if it as
|
|
33
|
+
// already be added to the window object and errors if so).
|
|
34
|
+
if (hasMagicallyProvidedQUnit) {
|
|
35
|
+
this.options = this.options || {};
|
|
36
|
+
options.exclude.push('qunit');
|
|
37
|
+
this.options.autoImport = options;
|
|
38
|
+
} else {
|
|
39
|
+
this.options.autoImport = options;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
11
42
|
};
|
|
@@ -6,7 +6,7 @@ module.exports = {
|
|
|
6
6
|
name: 'exam:iterate',
|
|
7
7
|
|
|
8
8
|
description:
|
|
9
|
-
|
|
9
|
+
"Runs your app's test suite in a random order for a number of iterations with the 'exam' command.",
|
|
10
10
|
|
|
11
11
|
works: 'insideProject',
|
|
12
12
|
|
|
@@ -17,14 +17,14 @@ module.exports = {
|
|
|
17
17
|
name: 'options',
|
|
18
18
|
type: String,
|
|
19
19
|
default: '',
|
|
20
|
-
description: 'A string of options to passthrough to the exam command'
|
|
20
|
+
description: 'A string of options to passthrough to the exam command',
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
name: 'path',
|
|
24
24
|
type: String,
|
|
25
25
|
default: '',
|
|
26
|
-
description: 'The output path of a previous build to run tests against'
|
|
27
|
-
}
|
|
26
|
+
description: 'The output path of a previous build to run tests against',
|
|
27
|
+
},
|
|
28
28
|
],
|
|
29
29
|
|
|
30
30
|
/**
|
|
@@ -83,7 +83,9 @@ module.exports = {
|
|
|
83
83
|
_buildForTests() {
|
|
84
84
|
this._write('\nBuilding app for test iterations.');
|
|
85
85
|
execa.sync(
|
|
86
|
-
'./node_modules/.bin/ember',
|
|
86
|
+
'./node_modules/.bin/ember',
|
|
87
|
+
['build', '--output-path', `${this._outputDir}`],
|
|
88
|
+
['stdio', 'inherit']
|
|
87
89
|
);
|
|
88
90
|
},
|
|
89
91
|
|
|
@@ -92,9 +94,7 @@ module.exports = {
|
|
|
92
94
|
*/
|
|
93
95
|
_cleanupBuild() {
|
|
94
96
|
this._write('\nCleaning up test iterations.\n');
|
|
95
|
-
execa.sync(
|
|
96
|
-
'rm', ['-rf', `${this._outputDir}`]
|
|
97
|
-
);
|
|
97
|
+
execa.sync('rm', ['-rf', `${this._outputDir}`]);
|
|
98
98
|
},
|
|
99
99
|
|
|
100
100
|
/**
|
|
@@ -114,8 +114,8 @@ module.exports = {
|
|
|
114
114
|
chalk.blue('Iteration'),
|
|
115
115
|
chalk.blue('Seed'),
|
|
116
116
|
chalk.blue('Exit Code'),
|
|
117
|
-
chalk.blue('Command')
|
|
118
|
-
]
|
|
117
|
+
chalk.blue('Command'),
|
|
118
|
+
],
|
|
119
119
|
});
|
|
120
120
|
|
|
121
121
|
for (let i = 0; i < numIterations; i++) {
|
|
@@ -139,9 +139,7 @@ module.exports = {
|
|
|
139
139
|
const chalk = require('chalk');
|
|
140
140
|
const execSync = require('child_process').execSync;
|
|
141
141
|
|
|
142
|
-
const seed = Math.random()
|
|
143
|
-
.toString(36)
|
|
144
|
-
.slice(2);
|
|
142
|
+
const seed = Math.random().toString(36).slice(2);
|
|
145
143
|
const command =
|
|
146
144
|
'./node_modules/.bin/ember exam --random ' +
|
|
147
145
|
seed +
|
|
@@ -162,5 +160,5 @@ module.exports = {
|
|
|
162
160
|
|
|
163
161
|
const color = exitCode ? chalk.red : chalk.green;
|
|
164
162
|
return [color(seed), color(exitCode), color(command)];
|
|
165
|
-
}
|
|
163
|
+
},
|
|
166
164
|
};
|