(六) kityminder 协同编辑执行用例时,如果做到不相互干扰

有同事在使用用例管理平台的时候反馈到,他跟另外一个同事一起执行某条用例,但是因为用例内容非常多,所以他的做法是仅展开自己需要执行的部分用例,其他的用例都做收起处理。但是这个做法,另外一个同事就不愿意了,因为这个收起展开的操作,也会同步到他的界面上,导致他根本没有办法执行他的用例。

idea

所以就上面的问题,想着有没有可能类似并没有涉及到内容,或者顺序的变化的操作,可以把这类的操作给过滤掉,而只传递关键数据变更的操作。

我们先看下 原本的逻辑是如何的

/**
 * 发送补丁数据
 */
sendPatch = (diff) => {
  this.sendMessage("1" + JSON.stringify({ case: this.getAllData(), patch: [diff], }))
}

我们可以看到,一旦内容变化,计算出diff数据以后,就直接通过websocket发送给到服务端去了,所以我们可以想的就是处理下这里的diff内容, 过滤掉无需要传递的数据。 那我们再来看看diff的数据是什么样的。

[
    {
        "op": "replace",
        "path": "/root/children/0/children/0/data/layout_right_offset/x",
        "value": -33
    }
]

是如上的数组的数据,就比如说上述的操作其实就是把节点的x坐标做了偏移处理,像这种数据其实就可以不需要去传递的, 所以我们可以过滤掉这样子数据,通过path的结尾来判断,因为 op以及value并不是有确定性。

解决

如果在线编辑用户是大于1的情况下,就过滤掉一些非更新数据的diff内容。

/**
 * 发送补丁数据
 */
sendPatch = (diff) => {
  if (this.state.editUsers.length > 1) {
    // 如果说编辑的人超过了1人的话 部分的样式修改 ,需要把它过滤掉
    diff = diff.filter(item => {
      return !endsWith(item.path, "layout") && 
      !endsWith(item.path, "layout_right_offset") && 
      !endsWith(item.path, "expandState") && 
      !endsWith(item.path, "layout_right_offset/y") && 
      !endsWith(item.path, "layout_right_offset/x")
    })
  }
  
  this.sendMessage("1" + JSON.stringify({ case: this.getAllData(), patch: [diff], }))
}

结果如上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值