簡體   English   中英

開玩笑:無法讀取未定義的屬性(讀取“0”)

[英]Jest: Cannot read properties of undefined (reading '0')

我是開玩笑的新手,我已經進行了測試以檢查從 url 對數據庫的多次調用。

我使用以下命令運行測試:

npx jest --watchAll file.test.js

一切正常。 但是,如果我修改逗號,例如,測試會再次運行並且我有錯誤。 我沒有來自 api 的任何“OK”,我也遇到了這個錯誤:

TypeError: Cannot read properties of undefined (reading '0')

當我嘗試檢查收到的內容是否符合我的預期時,就像我們在這一行中看到的那樣:

expect(1).toBe(result.data[0].id);

如果我停止測試並再次運行: npx jest --watchAl file.test.js 一切正常。

發生了什么事? 為什么測試運行兩次時出現這些錯誤?

我的測試代碼是:

import config from "../config";
import {getData} from "../com/functions";

describe("Test several connections with Postgress making a request via POST", () => {
    describe("Test read data from database", () => {
        test("Test 1: Read data from tbl001_users", async () => {
            let data = {
                "query": 1,
                "origin": "Mapping-Service"
            };
    
            let result = await getData(`${config.backend.protocol}://${config.backend.domain}:${config.backend.port}/api/youmalou`, data);
            console.log(result);
            expect(1).toBe(result.data[0].id);
            expect("OVT").toBe(result.data[0].code);
            expect(2).toBe(result.data[1].id);
            expect("TTHOT").toBe(result.data[1].code);
        });
        test("Test 2: Read data from tbl001_users", async () => {
            let data = {
                "query": 1,
                "origin": "Mapping-Service"
            };
    
            let result = await getData(`${config.backend.protocol}://${config.backend.domain}:${config.backend.port}/api/youmalou`, data);
            expect(1).toBe(result.data[0].id);
            expect("OVT").toBe(result.data[0].code);
            expect(2).toBe(result.data[1].id);
            expect("TTHOT").toBe(result.data[1].code);
        });
        test("Test 3: Read data from tbl001_users", async () => {
            let data = {
                "query": 1,
                "origin": "Mapping-Service"
            };
    
            let result = await getData(`${config.backend.protocol}://${config.backend.domain}:${config.backend.port}/api/youmalou`, data);
            expect(1).toBe(result.data[0].id);
            expect("OVT").toBe(result.data[0].code);
            expect(2).toBe(result.data[1].id);
            expect("TTHOT").toBe(result.data[1].code);
        });
        test("Test 4: Read data from tbl002_suppliers", async () => {
            let data = {
                "query": 2,
                "params": ["OVT"],
                "origin": "Mapping-Service"
            };
    
            let result = await getData(`${config.backend.protocol}://${config.backend.domain}:${config.backend.port}/api/youmalou`, data);
            expect("OK").toBe(result.result);
            expect(1).toBe(result.data.length);
        });
        test("Test 5: Read data from tbl002_suppliers", async () => {
            let data = {
                "query": 2,
                "params": ["OVT"],
                "origin": "Mapping-Service"
            };
    
            let result = await getData(`${config.backend.protocol}://${config.backend.domain}:${config.backend.port}/api/youmalou`, data);
            expect("OK").toBe(result.result);
            expect(1).toBe(result.data.length);
        });
        test("Test 6: Read data from tbl002_suppliers", async () => {
            let data = {
                "query": 2,
                "params": ["OVT"],
                "origin": "Mapping-Service"
            };
    
            let result = await getData(`${config.backend.protocol}://${config.backend.domain}:${config.backend.port}/api/youmalou`, data);
            expect("OK").toBe(result.result);
            expect(1).toBe(result.data.length);
        });
    });
});

我發送請求的文件有以下代碼:

import express from "express";
import {getData} from "../com/functions";
import config from "../config";
import cors from "cors";
import {YoumalouDDBB} from "../database/Youmalou/youmalou_ddbb";


const router = express.Router();

const ddbb = new YoumalouDDBB();
async function start(){
    await ddbb.connect();
}

start();

let url = null;
let urls = null;

if ((config.node_env === "test") || (config.node_env === "development") ||  (config.node_env === "production")){
    url = `${config.frontend.protocol}://${config.frontend.domain}:${config.frontend.port}`;
    urls = `${config.frontend.protocols}://${config.frontend.domain}:${config.frontend.port}`;
}

const corsOptions = {
    origin: [url, urls],
    optionSuccessStatus: 200,
    methods: ["POST", "OPTIONS"],
};

if ((config.node_env === "test") || (config.node_env === "development") || (config.node_env === "production")){
    router.all("*", cors(corsOptions));
}

router.post("/api/youmalou", async(req, res)=> {
    let result = null;
    

    if (typeof(req.body.query) === "number"){
        console.log(req.body);
        result = await ddbb.getDataFromDDBB(req.body.query, req.body.params);
    }

    res.json(result.data);
});

module.exports.Router = router;

我發現了問題。, 我也安裝了 nodemon 模塊。 所以,每次我修改我的代碼時,服務器都會重新啟動。

發生了什么事? 當我重新運行測試時,服務器沒有達到 100%,因此我的請求中有錯誤。

代碼是正確的,並且在服務器之前啟動時一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM