【问题标题】:How to check if a list contains the element passed in javascript如何检查列表是否包含在javascript中传递的元素
【发布时间】:2021-06-22 09:27:37
【问题描述】:

我想检查应用程序返回的列表是否包含预期的元素。请告诉我哪里出错了:

this.verifyOptionsInDrpDwn = async function(){
      var optionList = await drpDwn.all(by.tagName('option')).getText();
      console.log(optionList);
      var expOptions=['a','b','c','d','e','f'];
      for (let i = 0; i < expOptions.length; i++) {
           var bool=optionList.includes(expOptions[i]);
           console.log(bool);
      }
 }
 
 output :
     [
  '1-a',
  '2-b',
  '3-c',
  '4-d',
  '5-e',
  '6-f'
]

false

【问题讨论】:

  • 你的 optionList 数组是 [ '1-a', '2-b', '3-c', '4-d', '5-e', '6-f' ] 因此这不是预期的输出吗?我不确定你在问什么?
  • 是的,您的输出示例令人困惑
  • 在实际列表中,它有'1-a'(例如),但我只想验证'a'是否存在。

标签: javascript node.js angularjs selenium protractor


【解决方案1】:

我会做不同的事情

  1. 定义一个获取所有值的方法
this.verifyOptionsInDrpDwn = async function(){
      return drpDwn.all(by.tagName('option')).getText();
 }
  1. 在您的规范中定义预期的数组并进行断言
it('Test spec', async () => {
  let expectedArray = ['a','b','c','d','e','f']
  expect(await pageObject.verifyOptionsInDrpDwn()).toEqual(expectedArray);
});

这对应于最佳实践,您的函数是独立的,所有断言都是测试用例本身的一部分,因为它暗示了常识


但从 JavaScript 的角度来看,.every() 是要走的路

this.verifyOptionsInDrpDwn = async function(){
  var optionList = await drpDwn.all(by.tagName('option')).getText();
  var expOptions=['a','b','c','d','e','f'];
  return optionList.length === expOptions.length 
    && optionList.every(elem => expOptions.includes(elem))
 }

未经测试,但给你一个想法

【讨论】:

  • 谢谢谢尔盖.. 它对我有用。但它会检查实际列表中的确切值。我想检查该值是否包含在列表中。你能更新一下吗
【解决方案2】:

includes 确定数组是否在其条目中包含某个值。但在您的情况下,您想检查该数组的元素是否包含 expOptions 的值。

如果你替换var bool=optionList.includes(expOptions[i]); 使用var bool= optionList.some((a) =&gt; a.includes(expOptions[i]));,它应该可以工作。

【讨论】:

    猜你喜欢
    • 2014-07-31
    • 2014-04-30
    • 2016-05-12
    • 2016-06-25
    • 2021-06-24
    • 1970-01-01
    • 2020-08-18
    • 2011-08-19
    相关资源
    最近更新 更多