,所以我一直在遵循一些有关使用云代码的单元测试的教程。这是我组织代码库的方式:
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功能的内容。它使我能够将保存功能公开为摩卡咖啡。为了记录,所有这些在生产中都很好。
现在在我的测试中,我这样做:
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函数启动测试。我会收到以下错误:
课堂聊天室扩展了parse.object { ^
参考文献:未定义解析
快速修复是在我的模型文件的开头添加此信息:const parse = require('parse/node')
,但是解析已经在/cloud
中暴露了,因此在每个文件中复制粘贴对我来说似乎很愚蠢。我应该怎么办 ?更准确地说:如何使面向对象的结构符合测试?
另外,用零异步测试(用于测试性能)测试我所有代码的最佳代码结构是什么?
您应该将测试套件中的解析定义为全局
在您的测试文件夹中创建一个名为 helper.js
的文件,该文件看起来像这样:
// helper.js
global.Parse = require('parse/node');
这应该自动包含在您的任何测试中。如果您只有一个测试,只需将该行添加到测试文件的顶部。