2013-04-02 3 views
0

Вот сценарий, который я пытаюсь проверить:тестирование с жасминовым узлом

Зарегистрированный пользователь изменяет атрибут 'module' '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('/'); 
}); 

Проблема в том, что когда я делаю console.log (modules) из app.post, он показывает, что desc теперь является «test», но мой тест терпит неудачу, потому что он по-прежнему показывает значение по умолчанию.

Я новичок в том, чтобы выразить/узел и не знаю, как правильно написать эти виды тестов. Любой намек был бы оценен.

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); 
});