首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angular2,jasmine:在测试规范函数中看不到组件更改

Angular2,jasmine:在测试规范函数中看不到组件更改
EN

Stack Overflow用户
提问于 2017-03-22 20:16:13
回答 1查看 536关注 0票数 0

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

保存更改的mock Org服务:

代码语言:javascript
复制
@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);
  }

}

我的模拟路由器:

代码语言:javascript
复制
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();
}));

我正在测试的组件函数:

代码语言:javascript
复制
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
      );

}

我的测试:

代码语言:javascript
复制
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我的函数然后尝试路由。相反,我得到了一个错误:

代码语言:javascript
复制
Error: Expected a spy, but got Object({ data: ScalarObservable({ _isScalar: true, value: Object({ org: Org({ id: 2, [SNIP]

我不确定我应该做什么来告诉"goToParent“路由已经被调用了。

提前感谢你的帮助,

杰罗姆。

EN

回答 1

Stack Overflow用户

发布于 2017-03-23 09:56:43

我解决了“在测试规范函数中看不到”的问题。我遗漏了一行,就在第一个whenStable()之后,应该是:

代码语言:javascript
复制
comp = fixture.componentInstance;

这使得所有的同步都很正常。现在我必须弄清楚如何使路由测试工作。那是另一份工作。

杰罗姆。

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

https://stackoverflow.com/questions/42951396

复制
相关文章

相似问题

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