如何解决为什么在比较两个相同的对象时出现错误:“预期PostModel{}为PostModel{}”在我的测试中
我正在尝试测试调用API的Angular服务,比较响应。但是在我只想比较没有数据的全局对象之前。而且我的代码const resp: PostModel = service.setPost('data'); mockRequest.flush(resp); mockHttp.verify();
的这一部分有一个错误,并且我不理解这是因为它们是相同的对象。
这是
我的post-service.ts
public addPost(newPost: PostModel): Observable<PostModel> {
return this.http.post(this.apiUrl + 'add',newPost).pipe( map( response => {
console.log('response: ',response);
return this.setPost(response);
}));
}
public setPost(data: any): PostModel{
let post: PostModel= new PostModel();
/**
post.id = data.id;
post.author = data.userId;
post.title = data.title;
post.content = data.content;
post.description = data.description;
post.img.push(data.img);
post.isHorror = !data.forChild;
*/
return post;
}
和
我的post-service.spec.ts
import {inject,TestBed} from '@angular/core/testing';
import { HttpClientModule } from '@angular/common/http';
import {HttpClientTestingModule,HttpTestingController,} from '@angular/common/http/testing';
import PostModel from '../models/Post.model';
import { PostService } from './post.service';
describe('PostService',() => {
let mockHttp: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientModule,HttpClientTestingModule],providers: [PostService]
});
mockHttp = TestBed.get(HttpTestingController);
});
it('should be created',inject( [PostService],(service: PostService) => {
expect(service).toBeTruthy();
}));
it('shoul call post and return PostModel',inject(
[PostService],(service: PostService) => {
const newPost: PostModel = new PostModel();
service.addPost(newPost).subscribe((response => {
expect(response).toBe(newPost);
}));
const mockRequest = mockHttp.expectOne('api/story/post/add');
expect(mockRequest.request.method).toEqual('POST');
/** const data = this.generatePostMock(); */
const resp: PostModel = service.setPost('data');
mockRequest.flush(resp);
mockHttp.verify();
}
));
generatePostMock(): PostModel {
let mock: PostModel = new PostModel();
mock.id = 1;
mock.author = 12;
mock.title = 'title';
mock.content = 'content';
mock.description = 'description';
mock.img.push('../assets/img/hell_dog.png');
mock.isHorror = true;
}
});
解决方法
您不是在比较相同的对象,而是相同的对象,因此必须使用toEqual(newPost)
而不是toBe(newPost)
,如下所示:
expect(response).toEqual(newPost);
摘自Jasmine Matchers文档:
toBe(expected)
:期望实际值等于期望值===。
toEqual(expected)
:使用深度相等性比较,期望实际值等于期望值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。