Результат вашего теста на кипарис будет таким же, если элемент с name=planSelect
не содержит dummyPlan
, то есть в этот момент тест не пройден.
Разница между ними заключается в том, что в первой форме, используя contains () , вы фактически пытаетесь выбрать элемент, а результат cy.get (...). Содержит ( ) выдаст этот ожидаемый элемент DOM, допуская дальнейшее сцепление методов, таких как:
cy.get('[name=planSelect]').contains(dummyPlan).click();
Во второй форме вы делаете явное утверждение, чтобы убедиться, что dummyPlan существует в другом элементе, используя Chai chainer contain
.
Это небольшая разница, и результат тот же, но я бы порекомендовал вам использовать cy.get('[name=planSelect]').contains(dummyPlan)
только в том случае, если вы хотите связать какой-то другой метод после содержимого, и использовать вторую форму, если вы хотите явно утвердить что этот элемент существует. Логически говоря, первый будет представлять общий сбой теста (Cypress пытался найти элемент, которого там не было), а второй представляет явный сбой утверждения (элемент должен содержать dummyPlan
, но это не так).
Что касается вашего второго вопроса, name
является допустимым атрибутом HTML, и использование его для ваших тестов может привести к путанице, если атрибут используется в его исходной функции (для именования полей ввода) или если атрибут там просто в целях тестирования. Я бы порекомендовал вам использовать cy-name
, как следует из документации, потому что таким образом вы избежите этой двусмысленности и дадите понять, что этот атрибут cy-name
присутствует только в целях тестирования.
Более того, в некоторых ситуациях вы можете решить удалить все cy-name
из своего кода перед отправкой в производство (в процессе сборки, используя какой-нибудь плагин для веб-пакета, например string-replace-loader ). Вы не сможете сделать то же самое, если используете только name
, потому что вы также удалили бы необходимый ввод name
, если в вашем коде были какие-то входные данные.