fix(testing): handle cypress parameters when invoked through Angular CLI

When Cypress was invoked using `ng`, it  was throwing errors because no additional properties were allowed.
When allowed, all the extra options are passed as array in the `--` key, which is not currently handled.
This commit allows additional properties and makes sure that if any adittional options are passed they are parsed and incorporated correctly.

ISSUES CLOSED: #3571
This commit is contained in:
Tasos Bekos 2020-08-25 16:43:42 +03:00 committed by Victor Savkin
parent 875e48400d
commit ee4b2783fe
3 changed files with 32 additions and 1 deletions

View File

@ -312,6 +312,28 @@ describe('Cypress builder', () => {
done(); done();
}); });
it('should call `Cypress.run` with provided environment variables through additional properties', async (done) => {
cypressBuilderRunner(
{
...cypressBuilderOptions,
'--': ['--env.x=x', '--env.y', 'y'],
},
mockedBuilderContext
)
.toPromise()
.then(() => {
expect(cypressRun).toHaveBeenCalledWith(
jasmine.objectContaining({
env: jasmine.objectContaining({ x: 'x', y: 'y' }),
})
);
expect(cypressOpen).not.toHaveBeenCalled();
done();
});
fakeEventEmitter.emit('exit', 0); // Passing tsc command
});
test('when devServerTarget AND baseUrl options are both present, baseUrl should take precidence', async (done) => { test('when devServerTarget AND baseUrl options are both present, baseUrl should take precidence', async (done) => {
const options: CypressBuilderOptions = { const options: CypressBuilderOptions = {
...cypressBuilderOptions, ...cypressBuilderOptions,

View File

@ -14,6 +14,7 @@ import { readJsonFile } from '@nrwl/workspace';
import { legacyCompile } from './legacy'; import { legacyCompile } from './legacy';
import { stripIndents } from '@angular-devkit/core/src/utils/literals'; import { stripIndents } from '@angular-devkit/core/src/utils/literals';
import { installedCypressVersion } from '../../utils/cypress-version'; import { installedCypressVersion } from '../../utils/cypress-version';
import * as yargsParser from 'yargs-parser';
const Cypress = require('cypress'); // @NOTE: Importing via ES6 messes the whole test dependencies. const Cypress = require('cypress'); // @NOTE: Importing via ES6 messes the whole test dependencies.
@ -54,6 +55,14 @@ export function cypressBuilderRunner(
options: CypressBuilderOptions, options: CypressBuilderOptions,
context: BuilderContext context: BuilderContext
): Observable<BuilderOutput> { ): Observable<BuilderOutput> {
// Special handling of extra options coming through Angular CLI
if (options['--']) {
const { _, ...overrides } = yargsParser(options['--'] as string[], {
configuration: { 'camel-case-expansion': false },
});
options = { ...options, ...overrides };
}
const legacy = isLegacy(options, context); const legacy = isLegacy(options, context);
if (legacy) { if (legacy) {
showLegacyWarning(context); showLegacyWarning(context);

View File

@ -86,6 +86,6 @@
"description": "The reporter options used. Supported options depend on the reporter." "description": "The reporter options used. Supported options depend on the reporter."
} }
}, },
"additionalProperties": false, "additionalProperties": true,
"required": ["cypressConfig", "tsConfig"] "required": ["cypressConfig", "tsConfig"]
} }