Angular 2单元测试准备模拟共享组件

时间:2017-01-06 08:42:43

标签: unit-testing angular mocking

我在Angular2应用程序中进行单元测试,对angular2测试框架也是新手。

我有2个组件,并从服务中调用相同的方法。

首先,我需要导入服务和模型来创建模拟

import { MyService } from '../../shared/my.service';
import { MyModel } from '../../shared/my.model';

其次,将模型和服务安排到模拟

describe('MyComponent', () => {
  let component: MyComponent;
  let fixture: ComponentFixture<MyComponent>;
  const mockMyModel: MyModel[] = [];
  const mockMyService = {
    sameMethod: () => Observable.of(mockMyModel),
  };

最后,模拟服务

beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ MyComponent],
    })
    .overrideComponent(MyComponent, {
      set: {
        providers: [
          { provide: MyService , useValue: mockMyService },
        ],
      },
    })
    .compileComponents();
  }));

我需要为我的另一个组件做同样的事情。

  • 选项1:有没有办法全局共享模拟准备 例如{ provide: MyService , useValue: global.mockMyService }

  • 选项2:是否可以将'ServiceTestingModule'(例如'RouterTestingModule')用于模拟服务。

谢谢!

1 个答案:

答案 0 :(得分:0)

绝对可以使用选项1

myMockProvider = { provide: MyService , useValue: mockMyService };

beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ MyComponent],
    })
    .overrideComponent(MyComponent, {
      set: {
        providers: [myMockProvider],
      },
    })
    .compileComponents();
  }));

myMockProvider也可以是提供者列表。嵌套列表由providers: [...]自动解析/展平。