Javascript 用jest响应本机测试,如何制作同构的获取发送cookie
我正在构建一个react本机应用程序,它使用用户帐户连接到论坛,并从那里获取一些数据。我试图让Javascript 用jest响应本机测试,如何制作同构的获取发送cookie,javascript,react-native,jestjs,fetch-api,isomorphic-fetch-api,Javascript,React Native,Jestjs,Fetch Api,Isomorphic Fetch Api,我正在构建一个react本机应用程序,它使用用户帐户连接到论坛,并从那里获取一些数据。我试图让fetch在我的测试中使用cookies与jest,但看起来好像不起作用 我使用isomorphic fetch在我的测试环境中提供fetch 我的代码如下: jest.setup.js: import "isomorphic-fetch" var iconv = require('iconv-lite'); var Entities =
fetch
在我的测试中使用cookies与jest
,但看起来好像不起作用
我使用isomorphic fetch
在我的测试环境中提供fetch
我的代码如下:
jest.setup.js
:
import "isomorphic-fetch"
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
main.js
:
import "isomorphic-fetch"
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
看起来由于某种原因没有发送任何cookie,它在第一个请求中按预期登录,但第二个请求没有登录。我怎样才能让它工作
顺便说一句,如果我更改
凭证:include
为凭证:同源
,它也不起作用。找到这个问题了吗?。看起来我们必须手动读取并设置cookie。