$ 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, на котором я работаю.
Как на самом деле получить щелчок, чтобы переключить мой флажок?