我正在使用Angular 2 final(2.0.1).我有一个提供服务的组件.它是唯一使用它的人,这就是为什么它提供它而不是包含模块,它也被注入到构造函数中.
@Component({
selector: 'my-comp',
templateUrl: 'my-comp.component.html',
styleUrls: ['my-comp.component.scss'],
providers: [MyService],
})
export class MyComponent {
constructor(private myService: MyService) {
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试实现规范时,它失败了.
describe("My Component", () => {
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [MyComponent],
providers: [
{
provide: MyService,
useClass: MockMyService
},
]
});
this.fixture = TestBed.createComponent(MyComponent);
this.myService = this.fixture.debugElement.injector.get(MyService);
});
describe("this should pass", () => {
beforeEach(() => {
this.myService.data = [];
this.fixture.detectChanges();
});
it("should display", () => {
expect(this.fixture.nativeElement.innerText).toContain("Health");
});
});
Run Code Online (Sandbox Code Playgroud)
但是,当我将服务提供声明从组件移动到包含模块时,测试通过.
我假设这是因为TestBed测试模块定义了模拟服务,但是当创建组件时 - 它会使用实际实现覆盖模拟...
有没有人知道如何测试提供服务和使用模拟服务的组件?
我正在使用Angular2 final(2.0.2)和angular-cli.我正在尝试将其设置为使用PhantomJS运行单元测试.使用Chrome和karma-chrome-launcher运行规范 - 所有测试都通过.运行相同的Phantomjs-prebuilt 2.1.13和karma-phantomjs-launcher 1.0.2测试失败.
我将phantomjs启动器添加到karma.conf中的plugins数组,以及浏览器数组中的PahntomJS.
我得到的错误是:
PhantomJS 2.1.1(Mac OS X 0.0.0)DataTableFormat应以毫秒为单位转换日期FAILED ReferenceError:找不到变量:src/main/js/test.ts中的Intl(第53565行)intlDateFormat @ webpack:/// Users /sninio/dev/csp-ui/~/@angular/common/src/facade/intl.js:117:0 < - src/main/js/test.ts:53565:20 webpack:/// Users/sninio /dev/csp-ui/~/@angular/common/src/facade/intl.js:148:36 < - src/main/js/test.ts:53596:59 dateFormatter @ webpack:/// Users/sninio /dev/csp-ui/~/@angular/common/src/facade/intl.js:157:0 < - SRC /主/ JS/test.ts:53605:39格式@的WebPack:///用户/ sninio /dev/csp-ui/~/@angular/common/src/facade/intl.js:192:0 < - SRC /主/ JS/test.ts:53640:29变换@的WebPack:///用户/ sninio /dev/csp-ui/~/@angular/common/src/pipes/date_pipe.js:92:0 < - SRC /主/ JS/test.ts:70473:90变换@的WebPack:///用户/ sninio /dev/csp-ui/src/main/js/app/pages/+platform/events/data-table/data-table.pipe.ts:9:4418 < - src/main/js/test.ts:52698 :5787 webpack:/// Users/sninio/dev/csp-ui/src/main/js/app/pages/+ platform/events /data-table/data-table.pipe.spec.ts:20:30 < - src/main/js/test.ts:60923:30执行@ webpack:/// Users/sninio/dev/csp-ui/~/@angular/core/bundles/core-testing.umd.j < - src/main/js/test.ts:2997:28 webpack:/// Users/sninio/dev/csp-ui /〜/ @ angular /core/bundles/core-testing.umd.js:951:32 < - src/main/js/test.ts:3084:56调用@ webpack:/// Users/sninio/dev/csp-ui …
我正在尝试为相对孤立的实施测试Pipe.我使用的是最新版本angular-cli(@angular2.0.0).
管道代码是:
import { Pipe, PipeTransform } from "@angular/core";
import { DatePipe, JsonPipe } from "@angular/common";
@Pipe({name: 'dataTableFormat'})
export class DataTablePipe implements PipeTransform {
// values with type 'json' are parsed to json. As a result, string values may be displayed with quotes ("<string>").
// To avoid that, we remove these quotes with this regex
private quotesExp: RegExp = /^\"|\"$/gi;
constructor(private datePipe: DatePipe, private jsonPipe: JsonPipe) {
}
transform(value: string, type: string): string { …Run Code Online (Sandbox Code Playgroud)