Javascript 茉莉花节测试
下面是我尝试测试的场景: 登录用户修改“模块”属性“desc”。我没有使用任何数据库来存储“模块”,它是在我需要的文件中定义的 以下是不起作用的测试代码: 首先,我有一个助手登录功能: //app.spec.jsJavascript 茉莉花节测试,javascript,express,jasmine,jasmine-node,Javascript,Express,Jasmine,Jasmine Node,下面是我尝试测试的场景: 登录用户修改“模块”属性“desc”。我没有使用任何数据库来存储“模块”,它是在我需要的文件中定义的 以下是不起作用的测试代码: 首先,我有一个助手登录功能: //app.spec.js var login = function(done) { var options = { uri: 'http://localhost:3000/login' , method: 'POST' , form: {
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(modules)时,它显示desc现在是“test”,但我的测试失败,因为在那里它仍然显示默认值
我不熟悉express/node,不知道如何正确编写此类测试。任何暗示都将不胜感激
附加模块:
//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;
我认为您不应该传递给
login
提供的jasmine节点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);
});