Zomb ie. js не может получить доступ к свойству набора данных элементов DOM - PullRequest
4 голосов
/ 30 марта 2020

У меня есть страница, которая содержит текстовый редактор. Я использовал CKEditor для этого. Вы передаете ему элемент div, и он загружает редактор в этот элемент.

Теперь я хотел написать интеграционные тесты для этой страницы. Для этой цели я использую zomb ie. js с версией 4.2.1 (старая, я знаю, но я застрял с ней). Однако я получаю сообщение об ошибке, просто пытаясь загрузить страницу. Очевидно, проблема возникает при попытке загрузить редактор в элемент div. Это релевантный вывод:

[some other resources loading]
  zombie GET http://localhost:10003/js/lib/ckeditor.js => 200 +0ms
  zombie GET http://localhost:10003/js/pages/categories/init.js => 200 +0ms
  zombie http://localhost:10003/js/lib/ckeditor.js:6623
                e.dataset.ckeFiller = true;
                                    ^

TypeError: Cannot set property 'ckeFiller' of undefined
    at au (http://localhost:10003/js/lib/ckeditor.js:6623:37)
    at Module.<anonymous> (http://localhost:10003/js/lib/ckeditor.js:7326:24)
    at n (http://localhost:10003/js/lib/ckeditor.js:57:22)
    at http://localhost:10003/js/lib/ckeditor.js:100:20
    at http://localhost:10003/js/lib/ckeditor.js:101:10
    at t (http://localhost:10003/js/lib/ckeditor.js:47:258)
    at http://localhost:10003/js/lib/ckeditor.js:48:7
    at Script.runInContext (vm.js:133:20)
    at Object.runInContext (vm.js:311:6)
    at window._evaluate (/home/laura/Projekte/fricke/hybristools/node_modules/zombie/lib/document.js:253:75)
    in http://localhost:10003/categories +68ms
Debug-Output hier:
undefined
{ http://localhost:10003/js/lib/ckeditor.js:6623
                e.dataset.ckeFiller = true;
                                    ^

TypeError: Cannot set property 'ckeFiller' of undefined
    at au (http://localhost:10003/js/lib/ckeditor.js:6623:37)
    at Module.<anonymous> (http://localhost:10003/js/lib/ckeditor.js:7326:24)
    at n (http://localhost:10003/js/lib/ckeditor.js:57:22)
    at http://localhost:10003/js/lib/ckeditor.js:100:20
    at http://localhost:10003/js/lib/ckeditor.js:101:10
    at t (http://localhost:10003/js/lib/ckeditor.js:47:258)
    at http://localhost:10003/js/lib/ckeditor.js:48:7
    at Script.runInContext (vm.js:133:20)
    at Object.runInContext (vm.js:311:6)
    at window._evaluate (/home/laura/Projekte/fricke/hybristools/node_modules/zombie/lib/document.js:253:75)
    in http://localhost:10003/categories
  cause:
   http://localhost:10003/js/lib/ckeditor.js:6623
                   e.dataset.ckeFiller = true;
                                       ^

   TypeError: Cannot set property 'ckeFiller' of undefined
       at au (http://localhost:10003/js/lib/ckeditor.js:6623:37)
       at Module.<anonymous> (http://localhost:10003/js/lib/ckeditor.js:7326:24)
       at n (http://localhost:10003/js/lib/ckeditor.js:57:22)
       at http://localhost:10003/js/lib/ckeditor.js:100:20
       at http://localhost:10003/js/lib/ckeditor.js:101:10
       at t (http://localhost:10003/js/lib/ckeditor.js:47:258)
       at http://localhost:10003/js/lib/ckeditor.js:48:7
       at Script.runInContext (vm.js:133:20)
       at Object.runInContext (vm.js:311:6)
       at window._evaluate (/home/laura/Projekte/fricke/hybristools/node_modules/zombie/lib/document.js:253:75)
       in http://localhost:10003/categories,
  isOperational: true }

Я знаю, что ошибка не связана с CKEditor, потому что я попробовал ее с другим редактором rich-text, который дал мне точно такую ​​же ошибку (отличалось только имя свойства ).

Ошибка, по-видимому, возникает при попытке установить значение свойства HTML data-cke-filler элемента br. Это элемент:

enter image description here

Этот элемент вставляется в редактор во время создания, он представляет содержимое редактора, которое является пустым в начале.

Я пытался использовать возможности отладки зомби, однако, так как ошибка возникает во время загрузки сайта, у меня действительно нет возможности вывести что-либо полезное. Насколько я знаю, zomb ie. js должен справиться с загрузкой этой страницы.

Итак, мой вопрос: что является причиной этой ошибки и как я могу ее исправить?

Дайте мне знать, если вам нужна дополнительная информация.

Спасибо.

Редактировать:

Вот код, куда я загружаю страница (написана на CoffeeScript):

require 'should'
Browser = require '../../support/browser'

describe 'editor page', ->

  browser = new Browser({debug: true})

  before (done) ->
    browser.debug()
    browser.visitLoggedIn('/', {name: 'tester', password: 'secret'})
      .then (done) ->
        browser.visitPage '/editor' # this is what doesn't work
      .then (done) ->
        console.log 'page loaded'
      .catch (error) ->
        console.error error

  it 'things should appear', ->
    ...

Метод visitLoggedIn - это пользовательский метод, который просто создает необходимые файлы cookie для просмотра приложения как аутентифицированного пользователя и посещения страницы с использованием visitPage. visitPage использует зомби visit метод. Они отлично работают во всех других интеграционных тестах этого приложения.


Редактировать 2: Так что мне удалось "насмехаться" над CKEdtor, используя этот ответ . Это не совсем то, что я хотел, но я решил попробовать поработать с этим сейчас. Однако теперь я получаю точно такую ​​же ошибку! На этот раз ошибка добавлена ​​в мой собственный код:

# These are two functions that are run shortly after inserting the editor into the page,
# so basically while the page is still loading. 
getLanguageChoice: -> # This one is executed first
    document.getElementById('language').value

  getMandantChoice: -> # This one second
    document.getElementById('shopClient').dataset.name # The error is thrown here

Это точная ошибка:

TypeError: Cannot read property 'name' of undefined
    at Object.CategoriesView.getMandantChoice (http://localhost:10003/js/pages/categories/view.js:49:59)
    at http://localhost:10003/js/pages/categories/app.js:22:97
    at process._tickCallback (internal/process/next_tick.js:68:7)

Это не имеет никакого смысла для меня. Значит ли это, что zomb ie каким-то образом не может получить доступ к значениям атрибутов data- *? Может быть, кто-то знает о зомби ie и может дать дальнейшее понимание?

1 Ответ

2 голосов
/ 02 апреля 2020

После дальнейшего осмотра новых идей, которые я получил, я нашел этот билет на странице проекта Github. Похоже, что свойство набора данных не реализовано в базовой библиотеке в используемой версии. Поскольку я не могу выполнить обновление, просто невозможно загрузить страницу, как она есть ...

Чтобы обойти это, я проведу рефакторинг своего кода, чтобы не использовать свойство data- *. К счастью, это не связано с слишком большой работой в моем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...