断言错误 [ERR_ASSERTION]:缺少预期的拒绝错误

如何解决断言错误 [ERR_ASSERTION]:缺少预期的拒绝错误

因此,我正在尝试使用 MochaJS、Sinonjs、rewire、chai 和 assert 为我的代码编写一些单元测试。我收到以下错误

 1) async function addOneRoom(db,newRoom)
   should reject error when the maximum room number has been reached:
 AssertionError [ERR_ASSERTION]: Missing expected rejection (Error).
  at async Context.<anonymous> (test\test.js:33:9).

所以我正在测试的功能如下:

async function addOneRoom(db,newRoom) {
const roomNumber = await createRoomNumber(db,newRoom.floor);

if (roomNumber !== 0) {
    newRoom.roomNumber = roomNumber;
    const result = await db.rooms.insertOne(newRoom);
    return newRoom
} else return new Error("No room can be added on this floor. The maximum numar of rooms has been reached")}

我的单元测试是:

describe("async function addOneRoom(db,newRoom)",() => {
const addOneRoom = rewired.__get__("addOneRoom")
const sandBox = sinon.createSandBox()

it("should reject error when the maximum room number has been reached",async () => {
    const newRoom = {
        floor: 1,sqm: 20,capacity: 5,features: {
            videoProjector: 1,stage: 2
        }
    }

    const insertOne = sandBox.stub().returns()
    const mockedCreateRoomNumber = sandBox.stub().resolves(0)

    const db = {
        rooms: { insertOne }
    }

    const stubbedRoomNumber = rewired.__set__({ createRoomNumber: mockedCreateRoomNumber })
    await assert.rejects(addOneRoom(db,newRoom),new Error("No room can be added on this floor. The maximum numar of rooms has been reached"))

    // sandBox.assert.calledOnceWithExactly(stubbedRoomNumber)
    sandBox.assert.calledOnceWithExactly(insertOne,{newRoom})

    const order = [
        // stubbedRoomNumber,insertOne
    ]

    sandBox.assert.callOrder(...order)
    stubbedRoomNumber()
})

我将不胜感激!

解决方法

不要返回错误,抛出它:

throw new Error("No room can be added on this floor. The maximum numar of rooms has been reached")}

返回错误与返回其他任何东西没有区别,并且不会导致承诺拒绝。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?