Реагируйте на нативное тестирование с помощью jest, как сделать изоморфную загрузку файлов cookie
Я создаю собственное приложение, которое подключается к форуму с учетной записью пользователя и получает оттуда некоторые данные. Я пытаюсь сделать fetch
использовать куки на моих тестах с jest
, но, похоже, не работает.
я использую isomorphic-fetch
иметь fetch
доступно в моей тестовой среде.
Мой код такой:
jest.setup.js
:
import "isomorphic-fetch"
main.js
:
var iconv = require('iconv-lite');
var Entities = require("html-entities").AllHtmlEntities;
const entities = new Entities();
function _textToUTF8(t) {
return entities.decode(iconv.decode(t, "windows-1252"));
}
function _generateFormData(d) {
var output = [];
for (var i in d) {
output.push(i + "=" + d[i]);
}
return output.join("&");
}
function _isLoggedIn(t) {
return t.indexOf("logout") >= 0 ? true : false;
}
function _getWebpage(url, r) {
return new Promise((resolve, reject) => {
fetch(url, r).then((response) => {
response.buffer().then((buffer) => {
var t = _textToUTF8(buffer);
console.log("Is logged in", url, _isLoggedIn(t));
resolve(t);
})
})
})
}
function login(username, password, cookieJar) {
var d = _generateFormData({
"username": username,
"password": password,
});
var h = {
"Content-Type": "application/x-www-form-urlencoded",
};
var r = {
method: "POST",
body: d,
headers: h,
credentials: "include",
};
var u = BASE_URL + "login.php";
return _getWebpage(u, r);
}
describe("TEST", () => {
it("Keeps session cookies", (done) => {
login("user", "password").then(() => {
_getWebpage(BASE_URL + "forumpage.php", {method: "GET", credentials: "include"}).then((r) => {
expect(_isLoggedIn(r)).toBe(true);
done();
})
})
})
})
// Is logged in https://www.website.com/login.php true
// Is logged in https://www.website.com/forumpage.php false
Похоже, по какой-то причине он не отправляет куки, он входит в систему, как и ожидалось, при первом запросе, но затем второй не входит в систему. Как я могу заставить его работать?
Кстати, если я изменю credentials: include
за credentials: same-origin
, это тоже не работает.