小编Sef*_*nio的帖子

提供服务的组件的Angular 2测试规范

我正在使用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测试模块定义了模拟服务,但是当创建组件时 - 它会使用实际实现覆盖模拟...

有没有人知道如何测试提供服务和使用模拟服务的组件?

jasmine angular

7
推荐指数
1
解决办法
8666
查看次数

为什么我的单元测试通过Chrome并且使用PhantomJS失败?

我正在使用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 …

phantomjs karma-runner angular-cli angular angular-test

4
推荐指数
1
解决办法
6258
查看次数

Angular 2 - 具有依赖性的angular-cli管道测试

我正在尝试为相对孤立的实施测试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)

karma-jasmine angular2-testing angular

3
推荐指数
1
解决办法
3363
查看次数