При выполнении следующего кода с использованием Mocha оба этих теста дают ошибку.
Первое возвращение:
«перед каждым« крючком для »следует проверить использование jQuery.getJSON jQuery.ajax» TypeError: Попытка обернуть ajax, который уже обернут
Второй возвращает просто неудачный тест:
AssertError: ожидал, что ajax будет вызван один раз, но был вызван 0 раз
var sinonAssert = require('@sinonjs/referee').assert;
var chaiAssert = require("chai").assert;
function makeCall(){
$.ajax({
method: "POST",
url: "some.php",
data: { name: "John", location: "Boston" },
dataType: "application/json"
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
}
describe('wrapping a function in a spy', function() {
beforeEach(function() {
sinon.spy(jQuery, "ajax");
});
afterEach(function() {
sinon.restore();
});
it("should inspect jQuery.getJSON's usage of jQuery.ajax", function(){
jQuery.getJSON("/some/resource");
sinonAssert(jQuery.ajax.calledOnce);
chaiAssert.strictEqual("/some/resource", jQuery.ajax.getCall(0).args[0].url);
chaiAssert.strictEqual("json", jQuery.ajax.getCall(0).args[0].dataType);
});
});
describe('makeCall', function() {
const spy = sinon.spy(jQuery, "ajax");
beforeEach(function() {
makeCall();
});
afterEach(function() {
sinon.restore();
});
it("should make only one ajax call", function(){
sinon.assert.callCount(spy, 1);
});
});
Я ожидаю, что запуск sinon.restore();
после каждого теста приведет к развертыванию объекта jQuery. Интересно, что когда я добавляю отдельные песочницы, второй тест проходит:
var sinonAssert = require('@sinonjs/referee').assert;
var chaiAssert = require("chai").assert;
var sandbox = require('sinon').createSandbox();
var sandbox2 = require('sinon').createSandbox();
function makeCall(){
$.ajax({
method: "POST",
url: "some.php",
data: { name: "John", location: "Boston" },
dataType: "application/json"
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
}
describe('wrapping a function in a spy', function() {
beforeEach(function() {
sandbox.spy(jQuery, "ajax");
});
afterEach(function() {
sandbox.restore();
});
it("should inspect jQuery.getJSON's usage of jQuery.ajax", function(){
jQuery.getJSON("/some/resource");
sinonAssert(jQuery.ajax.calledOnce);
chaiAssert.strictEqual("/some/resource", jQuery.ajax.getCall(0).args[0].url);
chaiAssert.strictEqual("json", jQuery.ajax.getCall(0).args[0].dataType);
});
});
describe('makeCall', function() {
const spy = sandbox2.spy(jQuery, "ajax");
beforeEach(function() {
makeCall();
});
afterEach(function() {
sandbox2.restore();
});
it("should make only one ajax call", function(){
sandbox2.assert.callCount(spy, 1);
});
});
Почему объект jQuery остается завернутым после теста?
Новые вопросы
jquery
jQuery - это библиотека JavaScript, рассмотрите возможность добавления тега JavaScript. jQuery - это популярная кросс-браузерная библиотека JavaScript, которая облегчает прохождение Document Object Model (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться в рассматриваемом коде, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.