2017-03-01 51 views
0

所以我一直在關注一些關於使用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功能用於測試目的的內容。它使我能夠將之前的保存功能展示給摩卡。爲了記錄,所有這些在生產中都能正常工作。

現在在我的測試中,我這樣做:

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函數啓動測試。我得到以下錯誤:

class ChatRoom extends Parse.Object { ^

ReferenceError: Parse is not defined

一個快速的解決辦法是在我的模型文件的開頭是這樣補充一點: 常量解析=需要(「解析/節點」)

但分析是已經在/cloud中曝光,所以我覺得在每個文件中複製粘貼這一行似乎很愚蠢。我該怎麼辦 ?更確切地說:我如何讓面向對象的結構符合測試?

此外,什麼是最好的代碼結構來測試我所有的代碼與零異步測試(測試性能)?

回答

0

你應該在你的測試套件定義解析爲一個全球性的

+0

如何?你能提供一些代碼嗎?謝謝 ! –

+0

like global.Parse = require('parse/node');你的規格在任何地方? – flovilmart

+0

我試圖在我的代碼中添加這個,但它沒有解決問題 –

0

創建一個名爲helper.js在您的測試文件夾中的文件,看起來像這樣:

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

這應自動獲得包含在您的任何測試。如果您只有一個測試,只需將該行添加到測試文件的頂部。