У меня есть страница, которая содержит текстовый редактор. Я использовал 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. Это элемент:
Этот элемент вставляется в редактор во время создания, он представляет содержимое редактора, которое является пустым в начале.
Я пытался использовать возможности отладки зомби, однако, так как ошибка возникает во время загрузки сайта, у меня действительно нет возможности вывести что-либо полезное. Насколько я знаю, 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 и может дать дальнейшее понимание?