Я пытаюсь написать тест для сканирования QR-кода из файла PNG. Я последовал объяснению из этого урока YouTube и скопировал тот же код, за исключением того, что в своих тестах я изменил имя PNG-файла.
/// <reference types = "cypress" />
import { Decoder } from '@nuintun/qrcode'
it('decodes QR code', () => {
cy.fixture('frame.png', 'base64')
.then((base64) => `data:image/png;base64,${base64}`)
.then((imageSrc) => {
const qrcode = new Decoder()
return qrcode.scan(imageSrc)
})
.its('data')
.then(cy.log)
.should('include', 'cypress.tips')
})
Однако при запуске этого кода я получаю сообщение об ошибке:
ТипОшибка
qrcode.scan не является функцией
Что я делаю не так в этом коде? Есть ли способ отсканировать QR-код, не делая сначала снимок экрана с веб-сайта, поскольку его на нем не будет?
Этот вопрос похож на: Сканирование QR-кодов с помощью Cypress: требуется руководство. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.
На самом деле в qrcode есть метод scan()
, но он относится к версии 3.3.5, которая является последней, опубликованной nuintun на Github.
Но если вы запустите yarn add @nuintun/qrcode
, то опубликованная там версия будет 4.4.1, в которой нет scan()
.
Если вы устанавливаете конкретно 3.3.5 yarn add @nuintun/[email protected]
, то ваш код работает, за исключением финального .should()
.
Это не работает, потому что предыдущий .then(cy.log)
меняет тему, поэтому .should()
не видит данные.
Это моя рабочая версия
cy.fixture('qr1.png', 'base64')
.then((base64) => `data:image/png;base64,${base64}`)
.then((imageSrc) => {
const qrcode = new Decoder()
return qrcode.scan(imageSrc)
})
.its('data')
.then(data => {
Cypress.log({ displayName: 'qrcode', message: data }) // use sync logging method
})
.should('include', 'http://en.m.wikipedia.org')
Вы также можете указать только путь к приспособлению (он должен быть относительно пакета node_modules
)
const qrcode = new Decoder()
const qr = qrcode.scan('../../cypress/fixtures/qr1.png')
cy.wrap(qr)
.its('data')
.then(data => {
Cypress.log({ displayName: 'qrcode', message: data })
})
.should('include', 'http://en.m.wikipedia.org')
Я переустановил конкретную версию @nuintun/qrcode, попробовал использовать ваш код, и все сработало. Большое спасибо за ваше решение, я очень ценю это! Хорошего дня!
Decoder().scan()
не является функцией. Я бы просмотрел документацию к библиотеке, которую вы используете, чтобы понять, как правильно использовать классDecoder
. npmjs.com/package/@nuintun/qrcode