Ошибка при добавлении поставщика Web3 через .execute () в Nightwatch.js - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь установить свою оконную переменную для провайдера кошелька 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.

...