如何检查列表是否包含传入的元素 javascript

How to check if a list contains the element passed in javascript

我想检查从应用程序返回的列表是否包含预期的 element.Please 让我知道哪里出错了 :

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

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

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

我会做不同的事

  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))
 }

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