feat(test): add angular2_testing dart library
angular2_testing is a user-facing dart test library built on top of the package:test dart unittest framework and runner. For usage, see modules_dart/angular2_testing/README.md. Closes #3289
This commit is contained in:

committed by
Jeremy Elbourn

parent
d90a2269f9
commit
93a1ec29e1
@ -0,0 +1,99 @@
|
||||
// Because Angular is using dart:html, we need these tests to run on an actual
|
||||
// browser. This means that it should be run with `-p dartium` or `-p chrome`.
|
||||
@TestOn('browser')
|
||||
import 'package:angular2/angular2.dart'
|
||||
show Component, View, NgFor, provide, Inject, Injectable, Optional;
|
||||
|
||||
import 'package:test/test.dart';
|
||||
import 'package:angular2_testing/angular2_testing.dart';
|
||||
|
||||
// This is the component we will be testing.
|
||||
@Component(selector: 'test-cmp')
|
||||
@View(directives: const [NgFor])
|
||||
class TestComponent {
|
||||
List<num> items;
|
||||
TestComponent() {
|
||||
this.items = [1, 2];
|
||||
}
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
class TestService {
|
||||
String status = 'not ready';
|
||||
|
||||
init() {
|
||||
this.status = 'ready';
|
||||
}
|
||||
}
|
||||
|
||||
class MyToken {}
|
||||
|
||||
const TEMPLATE =
|
||||
'<div><copy-me template=\'ng-for #item of items\'>{{item.toString()}};</copy-me></div>';
|
||||
|
||||
void main() {
|
||||
initAngularTests();
|
||||
|
||||
setUpProviders(() => [provide(MyToken, useValue: 'my string'), TestService]);
|
||||
|
||||
test('normal function', () {
|
||||
var string = 'foo,bar,baz';
|
||||
expect(string.split(','), equals(['foo', 'bar', 'baz']));
|
||||
});
|
||||
|
||||
ngTest('can grab injected values', (@Inject(MyToken) token, TestService testService) {
|
||||
expect(token, equals('my string'));
|
||||
expect(testService.status, equals('not ready'));
|
||||
});
|
||||
|
||||
group('nested ngSetUp', () {
|
||||
ngSetUp((TestService testService) {
|
||||
testService.init();
|
||||
});
|
||||
|
||||
ngTest('ngSetUp modifies injected services', (TestService testService) {
|
||||
expect(testService.status, equals('ready'));
|
||||
});
|
||||
});
|
||||
|
||||
ngTest('create a component using the TestComponentBuilder', (TestComponentBuilder tcb) async {
|
||||
var rootTC = await tcb
|
||||
.overrideTemplate(TestComponent, TEMPLATE)
|
||||
.createAsync(TestComponent);
|
||||
|
||||
rootTC.detectChanges();
|
||||
expect(rootTC.debugElement.nativeElement.text, equals('1;2;'));
|
||||
});
|
||||
|
||||
ngTest('should reflect added elements', (TestComponentBuilder tcb) async {
|
||||
var rootTC = await tcb
|
||||
.overrideTemplate(TestComponent, TEMPLATE)
|
||||
.createAsync(TestComponent);
|
||||
|
||||
rootTC.detectChanges();
|
||||
(rootTC.debugElement.componentInstance.items as List<num>).add(3);
|
||||
rootTC.detectChanges();
|
||||
|
||||
expect(rootTC.debugElement.nativeElement.text, equals('1;2;3;'));
|
||||
});
|
||||
|
||||
group('expected failures', () {
|
||||
ngTest('no type in param list', (notTyped) {
|
||||
expect(1, equals(2));
|
||||
});
|
||||
|
||||
ngSetUp((TestService testService) {
|
||||
testService.init();
|
||||
});
|
||||
|
||||
// This would fail, since setUpProviders is used after a call to ngSetUp has already
|
||||
// initialized the injector.
|
||||
group('nested', () {
|
||||
setUpProviders(() => [TestService]);
|
||||
|
||||
test('foo', () {
|
||||
expect(1 + 1, equals(2));
|
||||
});
|
||||
});
|
||||
}, skip: 'expected failures');
|
||||
}
|
Reference in New Issue
Block a user