Вы хотите использовать какой-то модульный модуль тестирования, как комментирует @BrianDriscoll. Их много.
Я столкнулся с этой проблемой, и я не нашел хорошую фальшивую фреймворк AJAX для JavaScript. Я закончил создание Mocking Bird.
Преимущества оскорбляющих запросов с пересмешника
- Это дает мелкозернистого контроль над URL, метод HTTP, статус, заголовки запроса, заголовки ответа и тело ответа
- Это легко отключить все родное XMLHttpRequest вызывает и вставляет объект-макет, который поддерживает один и тот же интерфейс, не изменяя код под тестом
- Легко сохранить встроенный XMLHttpRequest, но создать макет запроса и ввести его в тестовый метод
- AJAX становится синхронным, упрощая модульное тестирование.
- пересмешника может быть использован с любым модульного тестирования рамках
- Пересмешник не имеет внешних зависимостей
Недостатки
- AJAX становится синхронным. Существует возможность того, что код испытуемый может вести себя по-разному
- Там в настоящее время нет способа проверить подключение таймаута
- Там в настоящее время нет способа проверить Chunked ответов HTTP
- Вы на самом деле не делают конечный TO- (что вы должны делать в любом случае)
- Нет запросов AJAX, если сетевые подключения отключены с помощью MockingBird.
- Он не применяет ту же политику домена. Вы можете высмеивать вызов AJAX с перекрестным доменом, который проходит ваши модульные тесты, но выдает ошибку в тесте интеграции.
быстрый и грязный пример:
var request = new MockingBird.XMLHttpRequest()
.returnsStatus(200)
.returnsBody('{"message":"I am a teapot"}')
.returnsHeaders({
"Content-Type": "text/json"
});
callSomeFunctionThatUsesAjax(request);
function callSomeFunctionThatUsesAjax(xhr) {
xhr.onreadystatechange = function() {
...
};
xhr.open("POST", "/foo");
xhr.send(null);
}
Вы также можете настроить фиктивные звонки в тех случаях, когда вы не можете предоставить свой собственный объект AJAX:
MockingBird.XMLHttpRequest.disableNetworkConnections()
.mock("/posts/123", "GET", {
status: 404,
body: "Page not found"
})
.mock("/posts/321/comments", "POST", {
status: 201,
responseHeaders: {
"Content-Type": "text/json"
},
body: {
post: {
id: 321,
comment: {
id: 1234
}
}
}
});
Теперь ваш код, который непосредственно инициализирует объект XMLHttpRequest
даже не должен знать, что существует MockingBird:
function createComment(postId, text) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (this.readyState !== 4) return;
if (this.status === 201) {
var data = JSON.parse(this.responseText);
alert("Created comment: " + data.post.comment.id);
}
else if (this.status === 404) {
alert("Post " + postId + " not found!");
}
};
xhr.open("POST", "/posts/" + postId);
xhr.send("post[id]=" + postId + "&post[comment][text]=" + escape(text));
}
createComment(123, "Test Test"); // alert's "Post 123 not found!"
createComment(321, "Test Test"); // alert's "Created comment: 1234"
Слышали ли вы о [QUnit] (https://qunitjs.com/)? –
Да. Чтобы уточнить, я создаю множество тестов для «функциональных функций». Это первый раз, когда нет реального значения возврата, кроме ответа API. Вопрос в том, как проверить это, когда нет DEV-API, где я могу запустить мой тест. –