Tenho um campo de entrada:
<input type="range" id="amtRange" value="0" min="280" max="1400">
Quero obter o valor do min
atributo e ver se ele é menor que outro valor pré-existente, ou seja, o valor no min
atributo (280) deve ser menor que o número na amt
variável.
Posso obter o valor como uma string assim:
cy.get('#amtRange').invoke('attr', 'min');
Mas não consigo descobrir como passá-lo como um inteiro. Eu tentei o seguinte:
const amt = 286;
let minAmt = cy.get('#amtRange').invoke('attr', 'min');
minAmt = parseInt(minAmt);
minAmt.should('be.lessThan', amt);
Mas isso produz o erro: TypeError: minAmt.should is not a function
.
Eu também tentei:
const amt = 286;
cy.get('#amtRange').then(($amtInput) => {
let minAmt = parseInt($amtInput.invoke('attr', 'min'));
minAmt.should('be.lessThan', amt);
});
Mas isso produz o erro: $amtInput.invoke is not a function
.
Como posso conseguir isso?
Fundamentalmente, o que você está tentando não faz sentido. Você está perdendo alguns conceitos bem básicos para escrever testes no Cypress. Veja o primeiro trecho:
.invoke
não retorna o valor, ele o produz , no sentido Cypress :Mesmo que isso funcionasse , e então:
na verdade te deu um número, a próxima linha:
não segue.
minAmt
é um número, não uma cadeia Cypress; não temshould
método.Da mesma forma, o segundo trecho:
fornece o elemento jQuery real (como o
$
prefixo pretende indicar - não use this onde você não tem um elemento!) Que não tem uminvoke
método, no entanto; tem oattr
método . Mas, novamente, mesmo se você fez a coisa certa:o resultado é um número , sem
should
método.Neste ponto você pode usar a "afirmação Mocha" vanilla :
No entanto, isso impactaria a capacidade de repetição . Idealmente, você quer ter uma única cadeia de consultas com uma asserção no final. Por exemplo, outra maneira de escrever seria:
Eu recomendo fortemente usar o TypeScript (que lhe dirá que a
Cypress.Chainable<string | undefined>
não é astring
) e/ou o plugin ESLint (que lhe dirá para não atribuir valores de retorno de comando ) para destacar esse tipo de erro muito antes.