Jasmine JavaScript:如何校验接口返回数组中符合要求的元素是否存在
数组元素校验正确实现方案
问题根因
你当前的测试代码未生效的核心原因是:要校验的postText、userId、isPublic字段均嵌套在响应数组元素的data属性下,并非和顶层id字段平级,原有匹配结构和实际接口返回结构不一致,导致匹配失败。
正确实现代码
it('Get all posts' , function(done){ Posts.getPosts('publicPosts' ,(err,resp) =>{ expect(resp).toContain(jasmine.objectContaining({ // 匹配顶层字段 id: '612d50bafabce50627bdb538', // 嵌套匹配data下的字段 data: jasmine.objectContaining({ postText:'post text sample', userId: '60f469cf784379051298e96d', isPublic: true }) })); done(); }); });
可选扩展方案
如果你需要更灵活的校验逻辑,也可以先对返回数组做自定义过滤,再断言过滤结果不为空:
it('Get all posts' , function(done){ Posts.getPosts('publicPosts' ,(err,resp) =>{ // 自定义过滤条件查找目标元素 const targetPost = resp.find(item => item.id === '612d50bafabce50627bdb538' && item.data?.postText === 'post text sample' && item.data?.userId === '60f469cf784379051298e96d' && item.data?.isPublic === true ) // 断言目标元素存在 expect(targetPost).toBeDefined(); done(); }); });
内容的提问来源于stack exchange,提问作者nadiakhouri
相关产品推荐
相关产品推荐

