اذهب إلى المحتوى

السؤال

نشر
const express = require("express");
const { Course } = require("../model/course");
const router = express.Router();

router.get("/", async (req, res) => {
  const coursesList = await Course.find();
  // .populate("Auther");
  res.send(coursesList);
});

router.post("/", async (req, res) => {
  let newCourse = new Course({
    name: req.body.name,
    description: req.body.description,
    price: req.body.price,
    user: req.body.user,
    rating: req.body.rating,
    isFeatured: req.body.isFeatured,
    dateCreated: req.body.dateCreated,
  });

  newCourse = await newCourse.save();
  res.send(newCourse);
});

router.put("/:id", async (req, res) => {
  let updatedCourse = await Course.findByIdAndUpdate(
    req.params.id,
    {
      name: req.body.name,
      description: req.body.description,
      price: req.body.price,
      user: req.body.user,
      rating: req.body.rating,
      isFeatured: req.body.isFeatured,
      dateCreated: req.body.dateCreated,
    },
    { new: true }
  );
  res.send(updatedCourse);
});

router.delete("/:id", async (req, res) => {
  await Course.findByIdAndRemove(req.params.id);
  res.send(`The course is Deleted`);
});

router.get(`/get/count`, async (req, res) => {
  const coursesCount = await Course.countDocuments((count) => count);

  if (!coursesCount) {
    res.status(500).json({ success: false });
  }
  res.send({
    coursesCount: coursesCount,
  });
});

module.exports = router;

هذا هو الرواتر ..

 

 

 

هذا app.js

const express = require("express");
const mongoose = require("mongoose");
const app = express();
const authJwt = require("./helpers/jwt");

const coursesRouter = require("./router/courses");
const usersRouter = require("./router/users");
const questionsRouter = require("./router/questions");

// app.use(authJwt());
app.use(express.json());
app.use("/courses", coursesRouter);
app.use("/users", usersRouter);
app.disable("etag");
app.use("/questions", questionsRouter);

mongoose
  .connect(
    "mongodb+srv://ahmed:a12345678@cluster0.f0bzw.mongodb.net/carnaDatabase?retryWrites=true&w=majority",
    {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      dbName: "carnaDatabase",
    }
  )
  .then(console.log("Connected"))
  .catch((err) => console.log(err));

const port = 3000;
app.listen(port, () => console.log(`App listening on port ${port}`));

 

 

واخيرا هذا هو ملف ال courses.test.js

const { request } = require("express");
const superTest = require("supertest");
const courses = require("../router/courses");
const app = require("../app");

describe("Post /courses", () => {
  describe("given a right inputs", async () => {
    test("should res to be 200 status code", () => {
      const res = request(app).post("/courses").send({
        name: "first course",
        description:
          "description should be more than 25. description should be more than 25. description should be more than 25. description should be more than 25. ",
        price: 100,
      });
      expect(res.statusCode).toBe(200);
    });
  });
});

 

 

هذه اول مرة اقوم بها ب integration test والفيديو الذى علمنى كان يشرح على اساس جافا سكريبت وليس node js ولا اعلم لماذا هذا ال test لا يعمل حيث يعطينى خطأ 

TypeError: Cannot read property 'JSON' of null

 

Recommended Posts

  • 1
نشر

أعتقد ان مسبب الخطأ هو محاولة قراءة statusCode من res و res في هذه الحالة undefined لذا استخدم async await  لانتظار الطلب 

describe("Post /courses", async() => {
  describe("given a right inputs", async () => {
    test("should res to be 200 status code", () => {
      
      const res = await request(app).post("/courses").send({
        name: "first course",
        description:
          "description should be more than 25. description should be more than 25. description should be more than 25. description should be more than 25. ",
        price: 100,
      });
      expect(res?.statusCode).toBe(200);
    });
  });
});

عدلت شيفرة ال testing قليلا باظافة async await وايضا لاحظ

      expect(res?.statusCode).toBe(200);

علامة الاستفهام مفادها أنه اذا كان res هو null او undefined لا يقرأ من الأساس فقط لتفادي الخطأ

  • 0
نشر
بتاريخ 34 دقائق مضت قال Salah Eddin Berriani:

أعتقد ان مسبب الخطأ هو محاولة قراءة statusCode من res و res في هذه الحالة undefined لذا استخدم async await  لانتظار الطلب 


describe("Post /courses", async() => {
  describe("given a right inputs", async () => {
    test("should res to be 200 status code", () => {
      
      const res = await request(app).post("/courses").send({
        name: "first course",
        description:
          "description should be more than 25. description should be more than 25. description should be more than 25. description should be more than 25. ",
        price: 100,
      });
      expect(res?.statusCode).toBe(200);
    });
  });
});

عدلت شيفرة ال testing قليلا باظافة async await وايضا لاحظ


      expect(res?.statusCode).toBe(200);

علامة الاستفهام مفادها أنه اذا كان res هو null او undefined لا يقرأ من الأساس فقط لتفادي الخطأ

 

ظهرت لى هذه الرسالة 

Await.thumb.png.e4a4c3dabab10d0ec6a7f7d14b5831bc.png

  • 1
نشر

معذرة اخطات في وضع  async في المكان الخطا

describe("Post /courses", async() => {
  describe("given a right inputs",  () => {
    test("should res to be 200 status code", async() => {
      
      const res = await request(app).post("/courses").send({
        name: "first course",
        description:
          "description should be more than 25. description should be more than 25. description should be more than 25. description should be more than 25. ",
        price: 100,
      });
      expect(res?.statusCode).toBe(200);
    });
  });
});

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...