剧场模式
首页后端TypeScript使用 TypeScript & mocha & chai 写测试代码实战

使用 TypeScript & mocha & chai 写测试代码实战 #11 测试更新 Post 功能

求知小风 · 元婴发布于新课程
0

import chai, { expect } from "chai";
import { app, authToken } from "./helpers/tests-helper";
import { UNAUTHORIZED, OK, UNPROCESSABLE_ENTITY } from "http-status-codes";

const postToTest = {
  body: "body"
};

let resPost: any;

before(async () => {
  resPost = await chai
    .request(app)
    .post("/api/posts")
    .set("Authorization", authToken)
    .send(postToTest);
});

describe("Read Post", () => {
  describe("GET /api/posts", () => {
    it("显示所有的 posts", async () => {
      const res = await chai.request(app).get("/api/posts");

      expect(res).to.have.status(OK);
      expect(res.body.success).to.equal(true);
      expect(res.body.data.docs).to.have.lengthOf(1);
      expect(res.body.data).to.have.property("page");
    });

    it("分页", async () => {
      const res = await chai.request(app).get("/api/posts?page=2");

      expect(res).to.have.status(OK);
      expect(res.body.success).to.equal(true);
      expect(res.body.data).to.have.property("docs");
      expect(res.body.data).to.have.property("page");
      expect(res.body.data.page).to.equal("2");
    });
  });

  describe("GET /api/posts/:id", () => {
    it("显示单个 post", async () => {
      const res = await chai
        .request(app)
        .get(`/api/posts/${resPost.body.data.post._id}`);

      expect(res).to.have.status(OK);
      expect(res.body.success).to.equal(true);
      expect(res.body.data).to.have.property("post");
    });
  });
});

describe("Create Post", () => {
  describe("POST /api/posts", () => {
    context("如果没有登录时", () => {
      it("不能创建 Post", async () => {
        const res = await chai
          .request(app)
          .post("/api/posts")
          .send(postToTest);

        expect(res).to.have.status(UNAUTHORIZED);
        expect(res.body.success).to.equal(false);
        expect(res.body).to.have.property("message");
      });
    });

    context("如果有登录时", () => {
      it("没有填写 body 不能创建 Post", async () => {
        const res = await chai
          .request(app)
          .post("/api/posts")
          .set("Authorization", authToken)
          .send({ body: "" });

        expect(res).to.have.status(UNPROCESSABLE_ENTITY);
        expect(res.body.success).to.equal(false);
        expect(res.body.errors).to.have.property("body");
      });

      it("填写了 body 可以创建 Post", async () => {
        const res = await chai
          .request(app)
          .post("/api/posts")
          .set("Authorization", authToken)
          .send(postToTest);

        expect(res).to.have.status(OK);
        expect(res.body.success).to.equal(true);
        expect(res.body.data).to.have.property("message");
        expect(res.body.data).to.have.property("post");
      });
    });
  });
});

describe("Update Post", () => {
  describe("PUT /api/posts/:id", () => {
    context("如果没有登录时", () => {
      it("不能更新 Post", async () => {
        const res = await chai
          .request(app)
          .put(`/api/posts/${resPost.body.data.post._id}`)
          .send(postToTest);

        expect(res).to.have.status(UNAUTHORIZED);
        expect(res.body.success).to.equal(false);
        expect(res.body).to.have.property("message");
      });
    });

    context("如果有登录时", () => {
      it("body 为空不能更新 Post", async () => {
        const res = await chai
          .request(app)
          .put(`/api/posts/${resPost.body.data.post._id}`)
          .set("Authorization", authToken)
          .send({ body: "" });

        expect(res).to.have.status(UNPROCESSABLE_ENTITY);
        expect(res.body.success).to.equal(false);
        expect(res.body.errors).to.have.property("body");
      });

      it("填写了 body 可以更新 Post", async () => {
        const res = await chai
          .request(app)
          .put(`/api/posts/${resPost.body.data.post._id}`)
          .set("Authorization", authToken)
          .send({ body: "newBody" });

        expect(res).to.have.status(OK);
        expect(res.body.success).to.equal(true);
        expect(res.body.data).to.have.property("message");
        expect(res.body.data).to.have.property("post");
        expect(res.body.data.post.body).to.equal("newBody");
      });
    });
  });
});
0 条回复
暂无回复~~
官方服务号
随机课程
TypeORM 实战进阶提高视频教程

TypeORM 实战进阶提高视频教程

0 个视频0 分钟高级

全部免费

TypeScript已完结新课程

课程目录

1Free使用 TypeScript & mocha & chai 写测试代码实战 #1 课程介绍

2Free使用 TypeScript & mocha & chai 写测试代码实战 #2 搭建测试环境

3Pro使用 TypeScript & mocha & chai 写测试代码实战 #3 写第一个测试

4Pro使用 TypeScript & mocha & chai 写测试代码实战 #4 每次测试完应该把数据库清空

5Pro使用 TypeScript & mocha & chai 写测试代码实战 #5 完成注册功能的测试

6Pro使用 TypeScript & mocha & chai 写测试代码实战 #6 完成登录功能测试

7Pro使用 TypeScript & mocha & chai 写测试代码实战 #7 jwt token 自动登录的处理 - 创建 Post 前要先登录

8Pro使用 TypeScript & mocha & chai 写测试代码实战 #8 如何测试分页请求 - 如何使用 context(四更)

9Free使用 TypeScript & mocha & chai 写测试代码实战 #9 开启桌面 growl 通知功能 - 可选(第五更)

10Pro使用 TypeScript & mocha & chai 写测试代码实战 #10 mocha 的 hook - before - beforeEach(六更)

Free使用 TypeScript & mocha & chai 写测试代码实战 #11 测试更新 Post 功能

12Free使用 TypeScript & mocha & chai 写测试代码实战 #12 只能更新自己创建的 Post

13Pro使用 TypeScript & mocha & chai 写测试代码实战 #13 测试删除 Post(三更)

14Pro使用 TypeScript & mocha & chai 写测试代码实战 #14 测试喜欢 Post 功能

15Pro使用 TypeScript & mocha & chai 写测试代码实战 #15 修复测试逻辑代码 - 建议

16Pro使用 TypeScript & mocha & chai 写测试代码实战 #16 测试创建和删除评论功能

17Pro使用 TypeScript & mocha & chai 写测试代码实战 #17 测试覆盖率 - 完结

学员(13)
一只快乐的码农 · 大乘爱优美 · 元婴sphawkcn · 真仙Mars.Liang · 道祖心灵归属 · 元婴霞 · 大乘YunZhi · 大乘要回家了 · 道祖陈太太先生 · 太乙zenkun · 道祖cometjun · 道祖fengzdchen · 金仙
最新动态
一只快乐的码农 · 大乘学习到了6:12
爱优美 · 元婴学习到了0:00
sphawkcn · 真仙学习到了0:00
Mars.Liang · 道祖学习到了0:00
心灵归属 · 元婴学习到了6:12
统计信息
    学员: 17686
    视频数量: 1043
    帖子数量: 427

© 汕尾市求知科技有限公司 | 粤ICP备19038915号 | 关注我们 | 在线学员:111

Top