Я пытаюсь запустить несколько тестов, требующих stubbing jQuery.ajax
. Я использую SinonJS для этого, и он отлично работал со старой версией jQuery (1.x)
var $ = require('jquery');
var sinon = require("sinon");
sinon.stub($, "ajax"); // this worked because $.ajax is defined
Однако после обновления до jQuery 2.x мне пришлось включить среду окон, когда мне нужен jquery из моего модуля для ее запуска. Я использую jsdom
для выполнения этого:
var document = require('jsdom').jsdom(),
window = document.parentWindow,
$ = require('jquery')(window);
ПРОБЛЕМА $.ajax
теперь undefined. Я подозреваю, потому что теперь он возвращает объект jQuery, привязанный к определенному элементу, но не полностью уверен. Кто-нибудь знает, почему и как обойти это?
EDIT Мой друг, который не находится на SO, указал, что если мы присоединяем window
к глобальному, мы можем получить простой объект jquery вместо factory
global.window = require('jsdom').jsdom().parentWindow;
var $ = require('jquery'); // this works as $.ajax is now defined
Я не поклонник прикрепления окна к глобальному, так как это повлияет на некоторые из плагинов, которые вводят контрольное окно. Не блокатор, но мне бы хотелось посмотреть, есть ли другой способ обойти эту проблему.