如何用mocha nyc为API编写测试用例以通过代码覆盖?

问题描述 投票:3回答:1

我想用mocha写一个测试用例来测试strapi API's,我试着在文档中搜索,但不明白,我只想知道我们到底如何写一个单元测试用例来测试任何API。之前我使用了下面的方法,但是在使用**nyc Istanbul包进行代码覆盖后,它显示出0%的行数和许多分支。

const request = require("co-supertest");
var assert = require("chai").assert;

const { SERVER_URL, PAYLOAD } = require("../config/config");
let JWT;
let dataId;

describe("States Module Endpoint", function () {
  before(function (done) {
   request(SERVER_URL)
    .post("/auth/local")
    .send(PAYLOAD)
    .expect(200)
    .expect("Content-Type", /json/)
    .end(function (err, res) {
      if (err) return done(err);
      const response = res.body;
      JWT = response["jwt"];
      done();
    });
});

describe("Create Method", function () {
  // case for empty,required and correct params for Create method done here
  describe("POST /crm-plugin/states/", function () {
    it("should not create an entry when empty params test case is executed", function (done)     {
      request(SERVER_URL)
        .post("/crm-plugin/states")
        .send({})
        .set("Authorization", "Bearer " + JWT)
        .expect(200)
        .end(function (err, res) {
          if (err) return done(err);
          assert.isEmpty(
            res.body,
            "Empty response is expected when params are empty"
          );
          done();
        });
    });

    it("should not create an entry when required params test case is executed", function   (done) {
      request(SERVER_URL)
        .post("/crm-plugin/states")
        .send({
          is_active: true,
        })
        .set("Authorization", "Bearer " + JWT)
        .expect(200)
        .end(function (err, res) {
          if (err) return done(err);
          assert.isEmpty(
            res.body,
            "Empty response is expected when required params are missing"
          );
          done();
        });
    });

    it("should create an entry when correct params test case is executed", function (done) {
      request(SERVER_URL)
        .post("/crm-plugin/states")
        .send({
          name: "Gujarat",
        })
        .set("Authorization", "Bearer " + JWT)
        .expect(200)
        .end(function (err, res) {
          dataId = res.body.id;
          if (err) return done(err);
          assert.strictEqual(
            res.body.name,
            "Gujarat",
            "Object in response should not differ"
          );
          dataId = res.body.id;
          done();
        });
    });
  });
});

describe("Update Method", function () {
  // case for correct params done for update method
  describe("PUT /crm-plugin/states/:id", function () {
    it("should update the data when correct params test case is executed", function (done) {
      request(SERVER_URL)
        .put("/crm-plugin/states/" + dataId)
        .send({
          name: "Goa",
        })
        .set("Authorization", "Bearer " + JWT)
        .expect(200)
        .end(function (err, res) {
          if (err) return done(err);
          assert.strictEqual(
            res.body.name,
            "Goa",
            "Object in response should not differ"
          );
          done();
        });
    });
  });
});

describe("Find Method", function () {
  // case for empty params done here
  describe("GET /crm-plugin/states", function () {
    it("responds with all records when empty params test case is executed", function (done) {
      request(SERVER_URL)
        .get("/crm-plugin/states")
        .set("Authorization", "Bearer " + JWT)
        .expect(200)
        .end(function (err, res) {
          if (err) return done(err);
          assert.isAtLeast(
            res.body.length,
            1,
            "Find method should return atleast one response."
          );
          done();
        });
    });
  });
});

describe("FindOne Method", function () {
  // case for correct params done here
  describe("GET /crm-plugin/states/:id", function () {
    it("responds with matching records when correct params test case is executed", function (done) {
      request(SERVER_URL)
        .get("/crm-plugin/states/" + dataId)
        .set("Authorization", "Bearer " + JWT)
        .expect(200)
        .end(function (err, res) {
          if (err) return done(err);
          assert.strictEqual(
            res.body.name,
            "Goa",
            "FindOne Method should return response with same name"
          );
          done();
        });
    });
  });
});

 describe("Count Method", function () {
   // case for count done here
   describe("GET /crm-plugin/states/count", function () {
    it("should return data count when correct params test case is executed", function (done) {
      request(SERVER_URL)
        .get("/crm-plugin/states/count")
        .set("Authorization", "Bearer " + JWT)
        .expect(200)
        .end(function (err, res) {
          if (err) return done(err);
          assert.isAtLeast(res.body, 1, "Count expected to be atleast 1");
          done();
        });
    });
  });
});

describe("Delete Method", function () {
  // case for correct params done here
  describe("DELETE /crm-plugin/states/:id", function () {
    it("should delete entry when correct params test case is executed", function (done) {
      request(SERVER_URL)
        .delete("/crm-plugin/states/" + dataId)
        .set("Authorization", "Bearer " + JWT)
        .expect(200)
        .end(function (err, res) {
          if (err) return done(err);
          assert.strictEqual(
            res.body.name,
            "Goa",
            "Object in response should not differ"
          );
          done();
        });
    });
  });
});

});

reactjs unit-testing testing mocha strapi
1个回答
1
投票

我想这个指南会对你有所帮助----------。https:/github.comstrapistrapipull6324

这就是你如何为你的Strapi应用创建一个测试套件。

© www.soinside.com 2019 - 2024. All rights reserved.