所以我一直在关注使用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
中公开了,所以在每个文件中复制粘贴这一行似乎很愚蠢。我该怎么办 ?更准确地说:我如何使面向对象的结构符合测试?
此外,使用零异步测试(测试性能)测试所有代码的最佳代码结构是什么?
答案 0 :(得分:0)
您应该在测试套件中将Parse定义为全局
答案 1 :(得分:0)
在名为helper.js
的测试文件夹中创建一个如下所示的文件:
// helper.js
global.Parse = require('parse/node');
这应该自动包含在您的任何测试中。如果您只有一个测试,只需将该行添加到测试文件的顶部。