You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Protractor中使用_.sortBy Lodash函数实现表格排序?

如何修复表格排序测试中的断言失败问题?

问题描述

我尝试对数据表格进行排序,编写了如下代码:

let cellsText = []; 
let length = await this.lastActivity.count(); 
for (let i = 0; i < length; i++) { 
  let text = await this.lastActivity.get(i); 
  cellsText.push(text) 
  let celltext = await text.getText(); 
  let sortedCellText = _.sortBy([celltext]); 
  expect(sortedCellText).toEqual(celltext); 
}

但运行后测试失败,报错信息为:

Expected [ '16 Apr 2018 15:54' ] to equal '16 Apr 2018 15:54'

请问该如何解决这个问题?


解决方案

你遇到的问题有两个核心点,咱们一步步来解决:

1. 直接的断言错误原因

_.sortBy()方法的返回值始终是一个数组——哪怕你只传入了单个元素的数组[celltext],它返回的还是['16 Apr 2018 15:54']这样的数组,而你把它和字符串类型的celltext做相等断言,类型不匹配,必然失败。

2. 排序逻辑的根本性错误

你现在的代码是在循环里逐个处理每个单元格,每次只对单个元素的数组排序,这完全没有实现“验证整个表格列是否已排序”的目标。正确的逻辑应该是先收集所有单元格的文本,再对整个数组排序,最后和原数组做对比。

修正后的代码示例

// 第一步:完整收集所有单元格的文本内容
let cellsText = [];
let length = await this.lastActivity.count();
for (let i = 0; i < length; i++) {
  let textElement = await this.lastActivity.get(i);
  let cellText = await textElement.getText();
  cellsText.push(cellText);
}

// 第二步:对收集到的日期数组进行正确排序
// 注意:必须将日期字符串转为Date对象,才能按时间顺序排序(字符串排序会出问题)
const sortedCells = _.sortBy(cellsText, (dateStr) => new Date(dateStr));

// 第三步:断言原数组和排序后的数组是否一致(验证表格是升序排列)
expect(cellsText).toEqual(sortedCells);

// 如果需要验证表格是降序排列,就反转排序后的数组再比较
// expect(cellsText).toEqual(sortedCells.reverse());

额外注意事项

  • 如果你的表格不是按日期排序,而是按字符串字典序排序,可以去掉转Date的逻辑,直接用const sortedCells = _.sortBy(cellsText);
  • 确保你使用的_.sortBy是Lodash的方法,已经正确引入到项目中

内容的提问来源于stack exchange,提问作者asl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:26:06