Я пытаюсь установить свою оконную переменную для провайдера кошелька web3 (относится к разработке Ethereum), и до сих пор не удалось использовать .execute()
.
Вот мой код:
globals.js
const Web3 = require('web3')
const PrivateKeyProvider = require("truffle-privatekey-provider")
const rinkeby = "https://rinkeby.infura.io/" + INFURA
const provider = new PrivateKeyProvider(PK, rinkeby)
const web3 = new Web3(provider)
console.log(web3)
module.exports = {
web3: web3
}
нагнетаемого Web3-tests.js
browser
.execute(function(data) {
// var canUseDOM = !!(typeof window !== 'undefined' & window.document)
return window.web3 = data
}, [test], function(response) {
console.log(response.value) //prints console result of returned web3
}))
А вот аналогичный рабочий пример с использованием Cypress (среда тестирования):
cy.on("window:before:load", (win) => {
const provider = new PrivateKeyProvider(Cypress.env("ETH_PRIV_KEY"), Cypress.env("ETH_PROVIDER"));
win.web3 = new Web3(provider); // eslint-disable-line no-param-reassign
});
Я получаю ошибку:
Error while running execute command: Converting circular structure to JSON
Я предполагаю, что, поскольку browser.execute()
, похоже, возвращает возвращенную в JSON версию того, что возвращает консоль, и поскольку класс поставщика web3 не может быть преобразован в JSON (циклическая ссылка), переменная окна не может быть установлена.
Мой вопрос - есть ли другой способ сделать это? Я пытался использовать метод Selenium WebDriver API, например .addScriptToEvaluateOnNewDocument
... но я также не уверен, как бы я делал это из Nightwatch. Я хотел бы создать модуль NPM для тестов с внедрением web-3 в Nightwatch, если я смогу это выяснить, поскольку я не могу найти что-либо онлайн для тестирования e2e DApp.