无法在Angular2测试中运行服务(从文档粘贴的代码副本)

问题描述 投票:2回答:2

我有以下错误(单元测试Angular2):

当测试模块已经实例化时,无法配置测试模块。确保你没有在inject之前使用TestBed.configureTestingModule

这是我的代码(它基本上是来自角文档的复制粘贴),它抛出上述错误:

import { TestBed, async } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { AppModule } from './app.module';
import { AppComponent } from './app.component'
import { MyServiceService } from './my-service.service'

beforeEach(() => {
  // stub UserService for test purposes
  let userServiceStub = {
    isLoggedIn: true,
    user: { name: 'Test User'}
  };

  TestBed.configureTestingModule({

     declarations: [ AppComponent],
     providers:    [ {provide: MyServiceService, useValue: userServiceStub } ]
  });

  let fixture = TestBed.createComponent(AppComponent);
  let comp    = fixture.componentInstance;
  // UserService from the root injector
  let userService = TestBed.get(MyServiceService);
  //  get the "welcome" element by CSS selector (e.g., by class name)
  let de = fixture.debugElement.query(By.css('.nesto'));
  let el = de.nativeElement;

  it('should welcome "Bubba"', () => {
    userService.user.name = 'something'; // welcome message hasn't been shown yet
    fixture.detectChanges();
    expect(el.textContent).toContain('some');
  });
});

我想运行一项服务,但似乎我不能这样做。

javascript angular
2个回答
2
投票

最可能的问题是你试图在你的beforeEach()中进行测试。您需要确保所有it()方法都在beforeEach()之外/之后:

beforeEach(() => {
  // stub UserService for test purposes
  let userServiceStub = {
    isLoggedIn: true,
    user: { name: 'Test User'}
  };

  TestBed.configureTestingModule({

     declarations: [ AppComponent],
     providers:    [ {provide: MyServiceService, useValue: userServiceStub } ]
  });

  let fixture = TestBed.createComponent(AppComponent);
  let comp    = fixture.componentInstance;

  // get the "welcome" element by CSS selector (e.g., by class name)
  let de = fixture.debugElement.query(By.css('.nesto'));
  let el = de.nativeElement;
});


it('should welcome "Bubba"', inject([MyServiceService], (userService) => {
  userService.user.name = 'something'; // welcome message hasn't been shown yet
  fixture.detectChanges();
  expect(el.textContent).toContain('some');
}));

0
投票

这样做,删除了beforeEach()中的实例并注入了它()。

所有学分都归Z. Bagley所有

import { TestBed, async, inject } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { AppModule } from './app.module';
import { AppComponent } from './app.component'
import { MyServiceService } from './my-service.service'
import { Inject } from '@angular/core';

beforeEach(() => {
  // stub UserService for test purposes
  let userServiceStub = {
    isLoggedIn: true,
    user: { name: 'Test User'}
  };

  TestBed.configureTestingModule({
     declarations: [ AppComponent],
     providers:    [ {provide: MyServiceService, useValue: userServiceStub } ]
  });
});
  it('should welcome "Bubba"', inject([MyServiceService], (userService) => {
    let fixture=TestBed.createComponent(AppComponent);
    fixture.detectChanges();
    expect(userService.user.name).toContain('se');
}));
© www.soinside.com 2019 - 2024. All rights reserved.