使用mocha解析服务器单元测试

时间:2017-03-01 18:29:51

标签: javascript unit-testing parse-server

所以我一直在关注使用Cloud Code进行单元测试的一些教程。以下是我组织代码库的方法:

cloud/
  ChatMessage/
    model.js
    update.js
  ChatRoom/
    model.js
    update.js
test/
  test.js

在我的model.js文件中,我有一个带辅助函数的Parse.Object子类。看起来像这样

class ChatMessage extends Parse.Object {
    constructor() {
        super('ChatMessage')
    }

    // Some functions
}

Parse.Object.registerSubclass('ChatMessage', ChatMessage)

module.exports = ChatMessage

在我的update.js文件中,我有之前/之后的保存和云代码功能:

function beforeSave(request, response) {
    // Do stuff
}

Parse.Cloud.beforeSave('ChatMessage', function (request, response) {
    beforeSave(request, response)
})

module.exports = {
    beforeSave: beforeSave,
}

为了测试目的,我已经提取了beforeSave函数的内容。它使我能够将之前的保存功能暴露给mocha。为了记录,所有这一切在生产中都很好。

现在在我的测试中我这样做:

const ChatMessage = require('../cloud/ChatMessage/model.js')
const ChatMessageUpdate = require('../cloud/ChatMessage/update.js')
const expect = require('expect')

describe('ChatMessage', function () {
    const request = {
        user: new Parse.User(),
        object: new ChatMessage()
    }
    const response = {
        success: function () {},
        error: function () {}
    }

    describe('creation', function () {
        it('should fail when the author is undefined', function () {
            ChatMessageUpdate.beforeSave(request, response)
            expect(response.error).toHaveBeenCalled()
        })
    })
})

我模拟了请求和响应对象。然后我尝试使用我的beforeSave函数启动测试。我收到以下错误:

  

类ChatRoom扩展Parse.Object {                          ^

     

ReferenceError:未定义Parse

快速修复是在我的模型文件的开头添加它,如下所示: const Parse = require(' parse / node')

但是Parse已经在/cloud中公开了,所以在每个文件中复制粘贴这一行似乎很愚蠢。我该怎么办 ?更准确地说:我如何使面向对象的结构符合测试?

此外,使用零异步测试(测试性能)测试所有代码的最佳代码结构是什么?

2 个答案:

答案 0 :(得分:0)

您应该在测试套件中将Parse定义为全局

答案 1 :(得分:0)

在名为helper.js的测试文件夹中创建一个如下所示的文件:

// helper.js
global.Parse = require('parse/node');

这应该自动包含在您的任何测试中。如果您只有一个测试,只需将该行添加到测试文件的顶部。