Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 柏树:可以';不要在断言中使用变量_Javascript_Cypress - Fatal编程技术网

Javascript 柏树:可以';不要在断言中使用变量

Javascript 柏树:可以';不要在断言中使用变量,javascript,cypress,Javascript,Cypress,我需要在过滤器中选择几个元素,并检查数据是否会根据过滤器显示。我试图在变量中保存元素的文本,并在最后检查它 it.only('the UI with a lot of entries in a filter, should be responsive', () => { let listItem1 let listItem2 cy.get('someTab').click().then(()=> { cy.getText(cy.get('someSelector

我需要在过滤器中选择几个元素,并检查数据是否会根据过滤器显示。我试图在变量中保存元素的文本,并在最后检查它

it.only('the UI with a lot of entries in a filter, should be responsive', () => {
  let listItem1
  let listItem2

  cy.get('someTab').click().then(()=> {
    cy.getText(cy.get('someSelector').first(), listItem1)
    cy.getText(cy.get('someSelector').last(), listItem2)
  }).then(()=> {
    cy.get('someSelector').first().click()
    cy.get('someSelector').last().click()
    cy.get('someButton').click()
  }).then(()=>{
    cy.log(listItem1, listItem2)  // nothing is visible
    cy.get('span[data-app]').should('contain', listItem1)  // fail
    cy.get('span[data-app]').should('contain', listItem2)  // fail
  })
})
我使用此功能:

getText(selector, variable) {
  return selector.invoke('text')
    .then(($text) => {
      variable = $text.trim()
    })
}  

它不起作用,但我无法理解如何修复它。

基本问题在于
getText(选择器,变量)
您想要给出值的第二个参数是“按值”传递的,但要在以后设置和使用它,需要“按引用”传递

如果“按值传递”,则设置变量在函数之外没有效果

有关背景信息,请参阅

在javascript中不可能通过“引用”传递,但您可以包装在容器对象中并修改属性

函数getText(选择器、容器、变量名){ selector.invoke('text') 。然后($text)=>{ 容器[variableName]=$text.trim() }) } 它('UI…',()=>{ const container={//注意const,因为容器从不更改 listItem1:null,//只有属性会更改 listItem2:null } cy.get('someTab')。单击()。然后(()=>{ cy.getText(cy.get('someSelector').first(),容器'listItem1') cy.getText(cy.get('someSelector').last(),容器'listItem2') }).然后(()=>{ cy.get('someSelector').first().click() cy.get('someSelector').last().click() cy.get('someButton')。单击() }).然后(()=>{ cy.log(container.listItem1);//listItem1可见 cy.log(container.listItem2);//listItem2可见 cy.get('span[data app]')。应('contain',container.listItem1) cy.get('span[data app]')。应('contain',container.listItem2) }) })
您可以将
getText()
更改为自定义命令

const容器={}
add('storeAs',{prevSubject:true},函数(subject,prop){
cy.wrap(主题)
.invoke('text'))
.然后(text=>container[prop]=text)
})
它('UI…',()=>{
cy.get('someTab')。单击()。然后(()=>{
cy.get(“someSelector”).first().storeAs('listItem1')
cy.get(“someSelector”).last().storeAs('listItem2')
}).然后(()=>{
...
}).然后(()=>{
cy.log(container.listItem1);//listItem1可见
cy.log(container.listItem2);//listItem2可见
cy.get('span[data app]')。应('contain',container.listItem1)
cy.get('span[data app]')。应('contain',container.listItem2)
})
})