2013-04-02 118 views
0

這裏是我試圖測試的場景:用茉莉節點測試

登錄的用戶修改'模塊'屬性'desc'。我沒有使用任何數據庫來存儲'模塊',它是在我需要的文件中定義的。

下面是不正常的測試代碼:

首先我有一個輔助登錄功能: //app.spec.js

var login = function(done) { 
    var options = { 
      uri: 'http://localhost:3000/login' 
     , method: 'POST' 
     , form: { 
       username: 'user' 
      , password: 'ffff' 
     } 
    } 
    request(options, function() { 
     done(); 
    }); 
}; 

和測試:

it('should be able to change desription of a module', function(done){ 
    login(done); 
    var options = { 
      uri: 'http://localhost:3000/module/1' 
     , method: 'POST' 
     , form: { 
      desc: 'test' 
     } 
    } 

    request(options, function(err, res, body){    
     var modules = require('../Model/module').modules; 
     console.log(modules); 
      expect(modules[0].desc).toBe('test'); 
      done(); 
    }); 
}); 

最後,

//app.js

app.post('/module/:module_id', ensureAuthenticated, function(req, res) {  
    var desc = req.body['desc']; 
    if(req.module_id){ 
     findModuleById(req.module_id, function(err, module) { 
      module.desc = desc; 
      console.log('changed module'); 
      console.log(module); 
     }); 
    } 

    res.redirect('/'); 
}); 

問題是,當我從app.post它顯示的說明做的console.log(模塊)現在是「測試」,但我的測試失敗,因爲它仍然顯示的默認值。

我是新來表達/節點,不知道如何正確地寫這些測試。任何暗示將不勝感激。

P.S.模塊:

//Model/module.js

var modules = [ 
     {id: 1, desc: 'Default description for module 1'} 
    , {id: 2, desc: 'Default description for module 2'} 
    , {id: 3, desc: 'Default description for module 3'} 
    ]; 

module.exports.modules = modules; 

回答

2

我不認爲你應該傳遞給login茉莉花節點提供done回調,而是一個函數,其中測試的其餘部分叫做

it('should be able to change desription of a module', function(done){ 

    var onDoneLoggingOn = function(){ 
     var options = ... 
     request(options, function(err, res, body){    
      ... 
      done(); 
     }); 
    }; 
    login(onDoneLoggingOn); 
});