当前位置: 首页 > 知识库问答 >
问题:

如何将ts-mockito注入到Angular 4组件测试中

党宇定
2023-03-14

typemoq注入上的问题类似,我如何将tsmockito对象注入angular的TestBed.configureTestingModule()?我能找到的任何模拟测试的例子都与角度无关。

考虑以下最小的工作示例进行测试 - 它包含一个ProgressComponent,在我们模拟的后端有一个ProgressService。该服务非常简单:

import { Injectable } from '@angular/core';

@Injectable()
export class ProgressService {
    private currentState: string = '1';

    constructor() {
    }

    setCurrentState(state: string) {
        this.currentState = state;
    }

    getCurrentState(){
        return this.currentState
    }

}

为了在没有<code>ts mockito</code>的情况下模拟它,我们只需扩展类。

import {ProgressService} from "../../../progress.service";

export class MockProgressService extends ProgressService{}

然后在测试< code>ProgressComponent时,< code>MockProgressService被传递给测试床。

import {async, ComponentFixture, getTestBed, TestBed} from '@angular/core/testing'

import { ProgressComponent } from './progress.component'
import {ProgressService} from "../progress.service"
import {MockProgressService} from "../shared/services/progress/progress.mock";

describe('ProgressComponent', () => {
  let injector: TestBed
  let mockService: ProgressService
  let fixture: ComponentFixture<ProgressComponent>
  let component: ProgressComponent

  beforeEach(async() => {
    TestBed.configureTestingModule({
      declarations: [ ProgressComponent ],
      providers: [{provide: ProgressService, useClass: MockProgressService}]
    }).compileComponents()

    injector = getTestBed()
    fixture = TestBed.createComponent(ProgressComponent)
    component = fixture.componentInstance
    mockService = injector.get(ProgressService)

    fixture.detectChanges();
  });
});

角度测试框架通过TestBed引入了依赖注入。我们如何在角度的测试设置中使用mockito?例如,如何使片段injector.get(ProgressService)与ts-mockito模拟兼容?

共有1个答案

曾苗宣
2023-03-14

如果提供者应该使用另一个对象而不是类来模拟,它应该使用useValueuseFactory

对茉莉来说是:

providers: [{
  provide: ProgressService,
  useValue: jasmine.createSpyObj('ProgressService', [...])
}]

对于 ts-mockito 它可以是:

progressServiceMock = mock(ProgressService);
...
providers: [{provide: ProgressService, useValue: instance(progressServiceMock)}]

虽然从原始类中继承模拟类,如class MockProgressService扩展ProgressService通常没有好处。如果目的是模拟一些方法,它们可以在真实的类实例或类原型上使用jasmine.spy(或当前测试框架具有的对应物)进行模拟。当一个类不是当前单元测试的那个类时,模拟/存根所有方法而不是几个方法有利于测试隔离。

 类似资料:
  • 问题内容: 我是新来的。我试图针对使用JDK 1.7,Spring 3.1,Groovy 1.8.6,Spock 0.6,Maven 3.0.4的独立Java应用程序编写Spock单元测试。基本的hello world spock测试正在运行。但是,当我尝试测试弹簧豆时,我发现它们没有被注入。我使用这里提到的方法。在 when 块内 , businessObjectDao为null 。我该如何工作

  • 我在为SpringJUnit4ClassRunner.class)配置测试时遇到了问题。我的问题是因为我的映射器从map结构到达时返回null。

  • 我想在单元测试模块中使用我的领域管理器。我做的 然后我想实现 但是realmManager为空。如何使用匕首2编写简单的模块测试?我用了匕首模拟,但没有用。我的模块包含 我尝试了谷歌的一切,但我不知道如何从图形中注入对象。

  • 我是JUnit和Mockito的新手,我想在我的DAO测试课中模拟我的SessionFactory,这就是我继续的方式: 这是我的刀类 但是当我运行我的测试时,我有一个< code > Java . lang . NullPointerException 异常,nullPointerException在< code > todos = session factory . getcurrentses

  • 我有以下用例: 问题2:为什么如果我只使用构造函数而不使用@Autowired或者反之亦然,那么一切都能正常工作,因为我没有加载Spring上下文...我有单元测试...

  • 问题内容: 我已经用npm和webpack反应了应用程序。我正在尝试向其中添加单元测试。 我正在使用index.html中包含的CDN中的jQuery,而不是使用node模块。 我在添加了单元测试用例的组件中使用jQuery 。 现在,当我执行测试用例时,我收到错误消息,说 我明白Jest无法解决它,因为我没有在Component中导入jQuery import。 问题是,如何让Jest知道外部J

  • 我有一个jsf spring应用程序,并使用mockito进行单元测试。在模拟中运行测试时,我一直得到。对于不存在。 要嘲弄的方法 我的JUnit测试是用注释的

  • 我使用和注释来注入一个原型bean。 然而,注入bean的行为类似于单例bean。有没有办法在mockito中注入一个原型范围bean? 我正在使用运行JUnit,并使用运行初始化模拟。