如何将完成的回调与注入角度2单位测试相结合

Nik*_*hou 7 asynchronous jasmine angular

我喜欢在进行单元测试时明确控制何时完成单元测试时传递完成回调的能力.任何人都可以解释在使用Angular 2时如何将其与依赖注入相结合?

更多背景:

具有回调函数的正常unittest如下所示:

it('should work with done', (done: Function) => {
    setTimeout(() => {
      a.test();
    }, 1000);
    a.test = () => {
      console.log('zweiter test');
      expect(true).toBeFalsy();
      done();
    };
Run Code Online (Sandbox Code Playgroud)

由角度2框架生成的单元测试使用注入,如下所示:

  it('should be defined', inject([TxparserService], (service: TxparserService) => {
    expect(service).toBeTruthy();
  }));
Run Code Online (Sandbox Code Playgroud)

我想同时使用回调函数和依赖注入.那怎么样?

Pau*_*tha 10

不确定你是否可以.就个人而言,我已经停止使用这种注射方式有几个原因:1.它非常冗长,而且2.你需要为每个测试用例不断重复它.其他几个选择是:

  • 用一个 beforeEach

    let service: TxparserService;
    
    beforeEach(() => {  // configure });
    
    beforeEach(inject([TxperserverService], (svc: TxparserService) => {
      service = svc;
    }));
    
    Run Code Online (Sandbox Code Playgroud)
  • 对我来说,beforeEach上面的内容仍然让我首先关注的是冗长,所以我现在就这样做了

    let service: TxparserService;
    
    beforeEach(() => {
        TestBed.configureTestingModule({
            providers: [ TxparserService ]
        });
    
        service = TestBed.get(TxparserService);
    });
    
    Run Code Online (Sandbox Code Playgroud)


Pav*_*kov 7

如果您需要将done-style-async测试与注射结合起来,您可以简单地执行以下操作:

it('should work', (done) => inject([SomeService], (someService: SomeService) =>
{
  expect(true).toEqual(true);
  done();
})());
Run Code Online (Sandbox Code Playgroud)

确保您立即调用返回的函数inject.

PS:有时既async不会也不会fakeAsync起作用,你仍然需要它以done老派的方式...

PPS:如果有人有兴趣如何用茉莉花大理石来解决Observable的时间相关操作问题,请看一下这个简短的例子:marble-scheduler-injector.ts