简体   繁体   English

如何在 Angular 中创建基本单元测试

[英]How to create a basic unit test in Angular

I've a component Strip .我有一个组件Strip It is a simple card in HTML with some numbers and calculation.它是一个简单的 HTML 卡片,带有一些数字和计算。 Here's the code:这是代码:

import { Component, Input, NgZone, OnInit } from '@angular/core';
import './strip.component.scss';
import { SisenseService } from '../../core/services/sisense.service';

@Component({
    selector: 'app-strip',
    templateUrl: './strip.component.html'
})
export class StripComponent extends BaseCardComponent implements OnInit {
        
    constructor(private zone: NgZone, private sisenseService: SisenseService) {
        super();
    }

    ngOnInit(): void { 
    }
}

I'm injecting 2 services, SisenseService and NgZone .我正在注入 2 个服务, SisenseServiceNgZone

I'm writing a very simple test case.我正在编写一个非常简单的测试用例。 Here's the spec file:这是规范文件:

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { StripComponent } from './strip.component';
import { CUSTOM_ELEMENTS_SCHEMA, NgZone } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core';
import { SisenseService } from '../../core/services/sisense.service';

describe('StripComponent', () => {
    let component: StripComponent;
    let fixture: ComponentFixture<StripComponent>;
    let sisenseService: SisenseService;
    let ngZone: NgZone;

    beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [StripComponent],
            imports: [TranslateModule.forRoot()],
            schemas: [CUSTOM_ELEMENTS_SCHEMA],
            providers: [SisenseService, NgZone]
        }).compileComponents();
    }));

    beforeEach(() => {
        fixture = TestBed.createComponent(StripComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
        sisenseService = TestBed.get(SisenseService);
        ngZone = TestBed.get(NgZone);
    });

    it('should create', () => {
        expect(component).toBeTruthy();
    });
});

But it is failing telling me that:但它没有告诉我:

Chrome Headless 76.0.3803.0 (Windows 10) StripComponent should create FAILED Failed: Can't resolve all parameters for NgZone: (?). Chrome Headless 76.0.3803.0 (Windows 10) StripComponent 应该创建 FAILED 失败:无法解析 NgZone 的所有参数:(?)。 Error: Can't resolve all parameters for NgZone: (?).错误:无法解析 NgZone 的所有参数:(?)。

Please point out my mistake.请指出我的错误。

Try to mock the NgZone and use that in the providers尝试模拟 NgZone 并在提供程序中使用它

const mockNgZone = jasmine.createSpyObj('mockNgZone', ['run', 'runOutsideAngular']);
mockNgZone.run.and.callFake(function () {return undefined;});

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [StripComponent],
        imports: [TranslateModule.forRoot()],
        schemas: [CUSTOM_ELEMENTS_SCHEMA],
        providers: [
            SisenseService,
            {provide: NgZone, useValue: mockNgZone}
        ]
    }).compileComponents();
}));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM