Mocha Chai .end() 函数没有被执行

如何解决Mocha Chai .end() 函数没有被执行

我一直在尝试为 Nodejs API 编写 Mocha Chai 测试。它以前是使用 Supertest 编写的。然而,在这两种情况下,即使我指定了错误的预期参数,测试也总是通过。

这里是使用 chai 的测试函数


const chai = require('chai');
const chaiHttp = require('chai-http');

chai.should();

chai.use(chaiHttp);


const app = require("../app");
const user = {
  first_name: "Name",last_name: "Lastname",email: "email",password: "password"
};

describe("Registration  Test",() => {
  it("Responds with status of registration",(done) => {
    chai.request(app)
    .post('/register')
    .send(user)
    .end((err,res) => {
      if(err) done(err);
      res.should.have.status.eq(200);
      res.body.should.have.property('success').eq(true);
      done();   <------------ Here it doesn't work. It returns For async tests and hooks,ensure "done()" is called error
    });
    done(); <----------- But here it works

  });


});


API 以具有成功、消息和状态属性的正文进行响应。但是不管我在chai应该写什么检查,测试总是通过。另外,当我添加 done();在 end() 内部,它没有被找到,但是当我在 end() 外部写入它时,它会运行。所以我假设我的代码永远不会进入 .end()。

解决方法

您需要传递 done 参数并仅在 end 函数内部调用它:

it("Responds with status of doctor registration",function (done) {
  chai.request(app)
    .post('/register')
    .send(user)
    .end((err,res) => {
      should.not.exist(err);
      res.should.have.status.eq(200);
      res.body.should.have.property('success').eq(true);
    });
});

参考https://www.chaijs.com/plugins/chai-http/#caveat

,

所以,我犯了一个愚蠢的错误。我使用 npm start 手动运行服务器并且端口 5000 被占用。当我使用 chai.request(app) 运行测试脚本时,端口已经被占用,我后来才意识到这一点。但是,我像这样使用 async/await 编写了脚本,

describe("Tests for Doctor and Patient Registration",() => {
  it("Existing doctor registation fails",async () => {
    const res = await chai
      .request(app)
      .post("/register")
      .set("Content-type","application/json")
      .set("Connection","keep alive")
      .send(user[0]);

    expect(res.status).to.equal(200);
    expect(res.body).to.have.property("success",false);
    expect(res.body).to.have.property(
      "message","A user with this email already exist,did you forget your password?"
    );
  });
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?