Angular2,jasmine:测试规范函数中未显示的组件更改

时间:2017-03-22 12:16:13

标签: unit-testing angular jasmine angular2-routing

我还在为我的Angular应用程序编写测试。我有一个测试,它修改一个Org对象,保存更改,然后证明已经保留了更改。但是,测试没有看到变化。

我保存更改的模拟组织服务:

@Injectable()
export class MockOrgService {
  constructor() { }

  public save(org: Org): Observable<Org> {
    let savedOrg: Org = new Org(org);
    savedOrg.address2 = 'Saved with id: ' + org.id;

    return Observable.of(savedOrg);
  }

}

我的模拟路由器:

beforeEach(async(() => {
  routeStub = { data: Observable.of( { org: org1 } ), snapshot: {} } ;
  TestBed.configureTestingModule({
    imports: [ FormsModule, RouterTestingModule ],
    providers : [
        { provide: DialogService, useClass: MockDialogService },
        { provide: GlobalsService, useClass: MockGlobalsService },
        { provide: OrgService, useClass: MockOrgService },
        { provide: ActivatedRoute, useValue: routeStub }          
    ],
    declarations: [ OrgDetailComponent ],
  })
  .compileComponents();
}));

正在测试我的组件功能:

private gotoParent(): void {
  this.router.navigate(['../'], { relativeTo: this.route });
}

public save(): void {
  this.error = null;
  let that = this;

  this.orgService
      .save(that.org)
      .subscribe(
          (org: Org): void => {
            that.org = org; 
            that.savedOrg = new Org(org);
            that.gotoParent();
          },
          error => this.error = error
      );

}

我的测试:

it('responds to the Save click by saving the Org and refilling the component', async(() => {

  fixture.detectChanges();
  fixture.whenStable().then(() => {
    comp.org.id = 2;
    comp.org.name = 'Another Org';
    let elButton = fixture.debugElement.query(By.css('#save'));
    elButton.nativeElement.click();

    fixture.detectChanges();
    fixture.whenStable().then(() => {
      expect(comp.error).toBeNull();
      expect(comp.savedOrg.id).toEqual(2);
      expect(comp.savedOrg.name).toEqual('Another Org');
      expect(routeStub).toHaveBeenCalledWith(['../']);
    });
  });    

当我使用断点时,我看到运行click()时调用OrgService.save(),并且在组件save()函数中调用了that.savedOrg。但是当测试进入expect()函数时,comp.savedOrg处于其原始值。好像有两个组件实例。

FWIW,在设置或未设置之后,我的savedOrg我的函数然后尝试路由。我反而得到一个错误:

Error: Expected a spy, but got Object({ data: ScalarObservable({ _isScalar: true, value: Object({ org: Org({ id: 2, [SNIP]

我不确定我应该怎么做才能说出已经调用了“goToParent”路由。

提前感谢您的帮助,

杰罗姆。

1 个答案:

答案 0 :(得分:0)

我想出了测试规范功能中未见到的&#34;&#34;问题。我在第一个whenStable()之后错过了一行,它应该是:

comp = fixture.componentInstance;

这使一切都同步正常。现在我必须弄清楚如何进行路线测试。那是另一份工作。

杰罗姆。

相关问题