Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7c8f02a

Browse files
chore: add @testing-library migration (testing-library#23)
This change was manually released on npm as `@angular-extensions/testing-library@5.1.2` to not intervene with the current version.
1 parent 662f135 commit 7c8f02a

File tree

4 files changed

+154
-0
lines changed

4 files changed

+154
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { Rule, chain, Tree, SchematicContext } from '@angular-devkit/schematics';
2+
import { TslintFixTask } from '@angular-devkit/schematics/tasks';
3+
import * as path from 'path';
4+
import { stripIndents } from '@angular-devkit/core/src/utils/literals';
5+
6+
function createRule(ruleName: string): TslintFixTask {
7+
return new TslintFixTask(
8+
{
9+
rulesDirectory: path.join(__dirname, 'rules'),
10+
rules: {
11+
[ruleName]: [true],
12+
},
13+
},
14+
{
15+
includes: ['**/*.spec.ts', '**/*.test.ts'],
16+
silent: false,
17+
},
18+
);
19+
}
20+
21+
function displayInformation(tree, context: SchematicContext) {
22+
context.logger.info(stripIndents`
23+
@angular-extensions/testing-library has moved to @testing-library/angular.
24+
25+
Learn more about this change here: https://github.com/testing-library/dom-testing-library/issues/260
26+
`);
27+
28+
return tree;
29+
}
30+
31+
function updatePackageJson(host: Tree) {
32+
if (host.exists('package.json')) {
33+
// tslint:disable-next-line: no-non-null-assertion
34+
const sourceText = host.read('package.json')!.toString('utf-8');
35+
const json = JSON.parse(sourceText);
36+
37+
if (json['devDependencies'] && json['devDependencies']['@angular-extensions/testing-library']) {
38+
json['devDependencies']['@testing-library/angular'] = '^6.0.0';
39+
delete json['devDependencies']['@angular-extensions/testing-library'];
40+
host.overwrite('package.json', JSON.stringify(json, null, 2));
41+
}
42+
}
43+
44+
return host;
45+
}
46+
47+
export default function(): Rule {
48+
return (host, context) => {
49+
context.addTask(createRule('no-angular-extensions-import'));
50+
51+
return chain([displayInformation, updatePackageJson])(host, context);
52+
};
53+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import * as ts from 'typescript';
2+
import { Replacement, RuleFailure, Rules } from 'tslint';
3+
import { tsquery } from '@phenomnomnominal/tsquery';
4+
5+
const IMPORT_QUERY = `ImportDeclaration StringLiteral[value="@angular-extensions/testing-library"]`;
6+
7+
const FAILURE_MESSAGE =
8+
'Found the library `@angular-extensions/testing-library`, use `@testing-library/angular` instead.';
9+
10+
export class Rule extends Rules.AbstractRule {
11+
public apply(ast: ts.SourceFile): Array<RuleFailure> {
12+
const imports = this.getImports(ast);
13+
return imports;
14+
}
15+
16+
private getImports(ast: ts.SourceFile): Array<RuleFailure> {
17+
return tsquery(ast, IMPORT_QUERY).map(result => {
18+
// replace text between (single) quotes
19+
const replacement = new Replacement(result.getStart() + 1, result.getWidth() - 2, '@testing-library/angular');
20+
const start = result.getStart();
21+
const end = result.getEnd();
22+
23+
return new RuleFailure(ast, start, end, FAILURE_MESSAGE, this.ruleName, replacement);
24+
});
25+
}
26+
}

‎projects/testing-library/migrations/migration.json‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
"version": "4.0.0",
66
"description": "Align API to *-testing-libraries",
77
"factory": "./4_0_0"
8+
},
9+
"migration-5.1.2": {
10+
"version": "5.1.2",
11+
"description": "Migrate to @testing-library",
12+
"factory": "./5_1_2"
813
}
914
}
1015
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import { getSystemPath, normalize, virtualFs } from '@angular-devkit/core';
2+
import { TempScopedNodeJsSyncHost } from '@angular-devkit/core/node/testing';
3+
import { HostTree } from '@angular-devkit/schematics';
4+
import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing';
5+
import { stripIndents } from '@angular-devkit/core/src/utils/literals';
6+
7+
describe('Migration to version 5.1.2', () => {
8+
const schematicRunner = new SchematicTestRunner('migrations', require.resolve('../../migrations/migration.json'));
9+
10+
test('it renames @angular-extensions to @testing-library (in files)', async () => {
11+
const specPath = normalize('tests/home.spec.ts');
12+
13+
const host = new TempScopedNodeJsSyncHost();
14+
const tree = new UnitTestTree(new HostTree(host));
15+
tree.create('/package.json', JSON.stringify({}));
16+
process.chdir(getSystemPath(host.root));
17+
await host
18+
.write(
19+
specPath,
20+
virtualFs.stringToFileBuffer(stripIndents`
21+
import { render } from '@angular-extensions/testing-library';
22+
import { render } from "@angular-extensions/testing-library";
23+
`),
24+
)
25+
.toPromise();
26+
27+
await schematicRunner.runSchematicAsync('migration-5.1.2', {}, tree).toPromise();
28+
await schematicRunner.engine.executePostTasks().toPromise();
29+
30+
const actual = await host
31+
.read(specPath)
32+
.toPromise()
33+
.then(virtualFs.fileBufferToString);
34+
35+
expect(actual).toBe(stripIndents`
36+
import { render } from '@testing-library/angular';
37+
import { render } from "@testing-library/angular";
38+
`);
39+
});
40+
41+
test('it renames @angular-extensions to @testing-library (in package.json)', async () => {
42+
const packageJson = normalize('/package.json');
43+
const host = new TempScopedNodeJsSyncHost();
44+
const tree = new UnitTestTree(new HostTree(host));
45+
46+
tree.create(
47+
packageJson,
48+
JSON.stringify({
49+
devDependencies: {
50+
'@angular-extensions/testing-library': '🦔',
51+
},
52+
}),
53+
);
54+
55+
await schematicRunner.runSchematicAsync('migration-5.1.2', {}, tree).toPromise();
56+
await schematicRunner.engine.executePostTasks().toPromise();
57+
58+
expect(tree.readContent(packageJson)).toBe(
59+
JSON.stringify(
60+
{
61+
devDependencies: {
62+
'@testing-library/angular': '^6.0.0',
63+
},
64+
},
65+
null,
66+
2,
67+
),
68+
);
69+
});
70+
});

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /