$ Document.append($ RootElement); null не является объектом (оценивает context.createDocumentFragment)

Я следую примеру по миграции на документах AngularJS, для input[checkbox] и это говорит, чтобы изменить

it('should update the model', inject(function($compile, $rootScope) {
  var inputElm = $compile('<input type="checkbox" ng-model="checkbox" />')($rootScope);

  inputElm[0].click(); // Or different trigger mechanisms, such as jQuery.trigger()
  expect($rootScope.checkbox).toBe(true);
});

в это:

it('should update the model', inject(function($compile, $rootScope, $rootElement, $document) {
  var inputElm = $compile('<input type="checkbox" ng-model="checkbox" />')($rootScope);

  $rootElement.append(inputElm);
  $document.append($rootElement);

  inputElm[0].click(); // Or different trigger mechanisms, such as jQuery.trigger()
  expect($rootScope.checkbox).toBe(true);
});

Моя установка не была похожа на первую, однако я старался следовать ей как можно лучше.

Аппроксимация моей установки такова:

import { getInjector, getDirective, toBeChecked, clickOn } from './test-helper.js';
describe('testing a click', () => {
    let $rootElement = false;
    let $document = false;
    beforeEach( () => {
        const $injector = getInjector();
        $rootElement = $injector.get('$rootElement');
        $document = $injector.get('$document');
    });
    it('should click the input', () =>{
        const $directive = getDirective('directive-with-checkbox');
        const $checkbox = directive.find('input#uniq-id-of-checkbox');
        clickOn($checkbox, $rootElement, $document);
        expect($checkbox).toBeChecked()
    })
});

И clickOn функция:

export function clickOn($element, $rootElement, $document){
    const mouseClickEvent = document.createEvent('MouseEvent');
    if($element.prop('type') === 'checkbox' && $rootElement && $document) {
        $rootElement.append($element);
        $document.append($rootElement); //<--- breaks
     }
     mouseClickEvent.init('click');
     $element[0].dispatchEvent(mouseClickEvent);
}

Я ожидаю, что событие click передается изменению, которое вызывает флажок.

Мое полное сообщение об ошибке:

TypeError: null is not an object (evaluating 'context.createDocumentFragment') in filename.js

Я не могу понять, чем мой код отличается от примера, чтобы заставить его работать не так, как ожидалось.

Похоже, это связано с тем, почему $(document).append() не работает в jQuery 1.9.1? но я сбит с толку, почему официальные документы предлагают делать document.append(...,

Когда я изменю это с $document в document.body ($document имеет тело, но, похоже, не найден jquery?), как я предположил, я могу заставить браузер отладчика кармы пройти туда, но не экземпляр PhantomJS, на котором я работаю.

Как на самом деле получить щелчок, чтобы переключить мой флажок?

0 ответов

Другие вопросы по тегам