Angular test Class with service dependency

Discussão em 'Angular' iniciado por user9506231, Março 23, 2025.

  1. user9506231

    user9506231 Guest

    I'm trying to test a plain class (not a component) in Angular which has a service dependency and a separate constructor argument. I've mirrored the docs for component testing with a dependency, but I get the following error:

    Unexpected value 'MyClass' imported by the module 'DynamicTestModule'. Please add a @NgModule annotation.

    my-service.service.ts:

    @Injectable({
    providedIn: 'root',
    })
    export class MyService { ... }


    my-class.ts:

    import { inject } from '@angular/core';
    import { MyService } from './my-service.service';

    export class MyClass {
    private _myService: MyService = inject(MyService);
    private _name: string;

    constructor(name: string) {
    this._name = name;
    }
    }


    my-class.spec.ts

    import { ComponentFixture, TestBed } from '@angular/core/testing';
    import { MyService } from './my-service.service';
    import { MyClass } from './my-class';

    describe('MyClass', () => {
    let myClass: MyClass;
    let mockMyService: Partial<MyService>;
    let fixture: ComponentFixture<MyClass>;

    beforeEach(() => {
    mockMyService = {};

    TestBed.configureTestingModule({
    imports: [MyClass],
    providers: [{ provide: MyService, useValue: mockMyService }],
    });

    fixture = TestBed.createComponent(MyClass); // causes error
    myClass = fixture.componentInstance;

    TestBed.inject(MyService);
    });

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


    updated my-class.spec.ts

    import { MyClass } from './my-class';

    describe('MyClass', () => {
    let myClass: MyClass;

    beforeEach(() => {
    myClass = new MyClass('someName');
    });

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


    How can I test this plain class with the service dependency?

    Continue reading...

Compartilhe esta Página