Angular测试报错:‘User[]’无法赋值给‘Expected<User>’求助
问题解决:类型不匹配与断言方法错误
错误根源
- 类型不匹配:测试中
user被定义为User[]数组类型,但getUserById方法返回的是单个User对象的Observable,导致expect(res).toBe(user)时出现类型赋值错误。 - 断言方法误用:
toBe用于比较引用类型的内存地址,而你需要比较的是对象的内容,应该使用toEqual做深度内容比对。
修改步骤
1. 修正user变量类型
将测试里的数组类型改为单个User对象:
const user: User = { "id": 23556, "name": "unique Ramakrishna", "email": "new.ramakrishna@15ce.com", "gender": "male", "status": "active" }
2. 替换断言方法
把toBe换成toEqual,确保比对对象的实际内容:
userService.getUserById(id).subscribe((res) => { expect(res).toEqual(user); });
修改后的完整测试代码
it('should call getUsersById', () => { const user: User = { "id": 23556, "name": "unique Ramakrishna", "email": "new.ramakrishna@15ce.com", "gender": "male", "status": "active" } userService.APIkey = '89668b2e3000a3aab5860410aa59fdc6c98977afa03a15d19df6be0e22f91650' let APIkey = userService.APIkey let url = 'https://gorest.co.in/public/v2/users' let id = 23556 userService.getUserById(id).subscribe((res) => { expect(res).toEqual(user); }); const req = httpTestingController.expectOne({ method: 'GET', url: `${url}/${id}?access-token=${APIkey}`, }); req.flush(user); });
内容的提问来源于stack exchange,提问作者user19761134
相关产品推荐
相关产品推荐

