Angular 如何使用get()模拟具有特定数据格式的服务

Angular 如何使用get()模拟具有特定数据格式的服务,angular,unit-testing,karma-jasmine,angular-test,Angular,Unit Testing,Karma Jasmine,Angular Test,我正在为我的组件编写单元测试,并模拟为我的组件发出http请求的服务。答复的格式如下: { ContactActivityView :[ { Code:"AB", IsActive:false, }, { Code:"BC", IsActive:true, } .. ... ] } 组件1.ts: cod

我正在为我的组件编写单元测试,并模拟为我的组件发出http请求的服务。答复的格式如下:

{
  ContactActivityView :[
        {
           Code:"AB",
           IsActive:false,
        },
        {
           Code:"BC",
           IsActive:true,
        }
        ..
        ...
  ]
}
组件1.ts:

codesArray: ICodeModel[];

constructor(
private service: CodesService,
private messageService: MessageService) { }

ngOnInit() {
  this.getCodes();
}

getCodes() {
    this.service.getCodes()
      .subscribe((response: ICodeModel[] | []) => {
        this.codesArray = response['ContactActivityView'];
      },
      error => console.log(error)
    );
}
.html文件:

 ..
  ...
    <div  class="message" *ngIf="codesArray.length === 0">
      No Data Found.
    </div>
    <div class="tbl-row" *ngFor="let code of codesArray">
      <div class="item">
        {{ code.Code }}
      </div>
      <div class="item">
        {{ code.IsActive }}
      </div>
  ..
  ...
问题是,当我运行测试时,它给了我
TypeError:无法读取未定义的
错误的属性'length'

这是因为当我订阅组件中的数据并将其存储在数组变量中时,它是未定义的

这是因为
MockCodesService getCodes()
正在从数组返回一个可观察的对象,但在我的组件
service中。getCodes()
希望从具有
ContactActivityView
属性(响应格式)的对象返回一个可观察的对象

因此,我尝试获取一个常量对象并将其传入
MockCodesService getCodes()

但这不起作用,仍然会出现未定义的错误

请帮忙。
谢谢。

组件。ts

codesArray: ICodeModel[] = [];

getCodes() {
  this.service.getCodes().subscribe(
    (response: { ContactActivityView: ICodeModel[] }) => {
      this.codesArray = response.ContactActivityView;
    },
    error => console.log(error),
  );
}
class MockCodesService {
  getCodes(): Observable<{ ContactActivityView: ICodeModel[] }> {
    return of({ ContactActivityView: [] });
  }
}
组件规格ts

codesArray: ICodeModel[] = [];

getCodes() {
  this.service.getCodes().subscribe(
    (response: { ContactActivityView: ICodeModel[] }) => {
      this.codesArray = response.ContactActivityView;
    },
    error => console.log(error),
  );
}
class MockCodesService {
  getCodes(): Observable<{ ContactActivityView: ICodeModel[] }> {
    return of({ ContactActivityView: [] });
  }
}
class MockCodesService{
getCodes():可观察{
返回({ContactActivityView:[]});
}
}

显示代码组件中的内容component@Chris请看一看。谢谢。如果“response”是一个数组,则无法执行此“response['ContactActivityView']”好的。那么我怎样才能用正确的方式写呢?谢谢。我想这就是我要找的。但代码仍然不起作用:(它仍然给出未定义的错误。这就是为什么我还附加了.html文件。请看一看。谢谢。给出错误时,请给我组件的构造函数和控制台的输出,哪一行代码给出了错误。请看一看。在图中,当我在应用程序上打开浏览器开发工具时,“Codes Master”给出了数据t在考试中打开时为空。抱歉,但不理解最后一个。
class MockCodesService {
  getCodes(): Observable<{ ContactActivityView: ICodeModel[] }> {
    return of({ ContactActivityView: [] });
  }
}