Реагируйте на нативное тестирование с помощью 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, это тоже не работает.

0 ответов

Другие вопросы по тегам