首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将component注入角四组分试验

如何将component注入角四组分试验
EN

Stack Overflow用户
提问于 2017-10-26 16:59:46
回答 1查看 3.8K关注 0票数 2

类似于这个问题 on typemoq注入,如何将麦基托对象注入到角的TestBed.configureTestingModule()中?我能找到的任何示例ts-mockito测试都与角度无关。

考虑下面要测试的小型工作示例--它包含一个ProgressComponent,后端有一个ProgressService,我们正在模仿它。这项服务非常琐碎:

代码语言:javascript
复制
import { Injectable } from '@angular/core';

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

    constructor() {
    }

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

    getCurrentState(){
        return this.currentState
    }

}

要在不使用ts-mockito的情况下对其进行模拟,我们只需扩展类。

代码语言:javascript
复制
import {ProgressService} from "../../../progress.service";

export class MockProgressService extends ProgressService{}

然后在测试ProgressComponent时,将MockProgressService传递给TestBed。

代码语言:javascript
复制
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)与test模拟兼容?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-26 17:31:39

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

对茉莉花来说是:

代码语言:javascript
复制
providers: [{
  provide: ProgressService,
  useValue: jasmine.createSpyObj('ProgressService', [...])
}]

对于T-mockito来说,它可以是:

代码语言:javascript
复制
progressServiceMock = mock(ProgressService);
...
providers: [{provide: ProgressService, useValue: instance(progressServiceMock)}]

虽然继承模拟类,但原始类(如class MockProgressService extends ProgressService )通常没有好处。如果目的是模拟某些方法,则可以在实际的类实例或类原型上使用jasmine.spy (或当前测试框架所具有的对应方法)对它们进行模拟。而且,当一个类不是当前单元测试中测试的类时,对所有方法(而不是多个方法)进行模拟/固执对测试隔离是有益的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46959896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档