用AAA(Arrange,Act,Assert)来写JavaScript的单元测试

这里有三个function:

    async all() {
        const sql = 'SELECT users.user, contacts.* FROM contacts, users\
                     WHERE contacts.userid = users.id;'
        const contacts = await this.db.all(sql)
        for(const index in contacts) {
            if(contacts[index].photo === null) contacts[index].photo = 'placeholder.jpg'
        }
        return contacts
    }

-----------------------------------------

async getByID(id) {
        try{
            const sql = `SELECT users.user, contacts.* FROM contacts, users\
                  WHERE contacts.userid = users.id AND contacts.id = ${id};`
            console.log(sql)
            const contact = await this.db.get(sql)
            if(contact.photo === null) contact.photo = 'placeholder.jpg'
            const dateTime = new Date(contact.lastcontact)
            const date = `${dateTime.getDate()}/${dateTime.getMonth() + 1}/${dateTime.getFullYear()}`
            contact.lastcontact = date
            return contact
        } catch(err) {
            console.log(err)
            throw err
        }
    }

----------------------------------------

async add(data) {
        console.log(data)
        let filename
        if(data.fileName) {
            filename = `${Date.now()}.${mime.extension(data.fileType)}`
            console.log(filename)
            await fs.copy(data.filePath, `public/avatars/${filename}`)
        }
        const timestamp = Math.floor(Date.now() / 1000)
        try {
            const sql = `INSERT INTO contacts(userid, title, description, avatar, lastcontact)\
                      VALUES(${data.account}, "${data.title}", "${data.description}", "${filename}", ${timestamp})`
            console.log(sql)
            await this.db.run(sql)
            return true
        } catch(err) {
            console.log(err)
            throw err
        }
    }
    async close() {
        await this.db.close()
    }

需要对他们写出三个单元测试。

使用AAA模式:编排(Arrange),执行(Act),断言(Assert)

下面有个模版就类似于这样的

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,超出我们目前的服务范围,暂时无法为您解答。


问答VIP目前服务范围为 :Python、Java、MySQL、Redis、MongoDB、HBase、Zookeeper、Kafka、Linux领域专业问题解答,为您提供解决问题的思路和指导。
不提供源码代写、项目文档代写、论文代写、安装包资源发送或安装指导等服务。

本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。