Javascript 用jest响应本机测试,如何制作同构的获取发送cookie

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 =

我正在构建一个react本机应用程序,它使用用户帐户连接到论坛,并从那里获取一些数据。我试图让
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。