我一直在关注Sails.js文档进行测试,这里: http://sailsjs.org/documentation/concepts/testing
我已成功实现了控制器测试 点击我的应用程序的不同路径,并检查不同Express请求的响应。
我的麻烦是知道A)如何实例化模型,特别是来自我的User
模型B)我如何保证模型成功创建。
我目前正在测试中,在before
钩子中,我创建了具有所有required
属性的新用户:
before(function(){
User.create({firstName:"Bob", lastName: "Balaban", password:"12345", email:"bob@bob.com"})
});
问题在于,我不知道如何验证此记录是否已添加到我的tests
数据库中,或者是否在调用create
时出现验证错误或其他错误。
注意:我问这个问题,因为依赖于before()
挂钩成功运行的测试失败了,唯一可能失败的原因是用户实际上没有添加到db < / p>
答案 0 :(得分:2)
您需要等待User
中的before
使用done
回调函数参数创建,并在完成设置测试环境后调用它。此外,尽管文档敦促您这样做,但您并没有因为某些原因在这里举起风帆。我还建议使用测试数据库而不是普通数据库,这样您的测试数据就不依赖于您的生产/开发数据。
以下示例代码。添加done
和exec
回调可能是最重要的部分。
var Sails = require('sails'), sails;
// ...
before(function(done) {
// Increase the Mocha timeout so that Sails has enough time to lift.
this.timeout(10000);
Sails.lift({
// If you want to use a different DB for testing, uncomment these and replace with your own DB info.
/*connections: {
// Replace the following with whatever suits you.
testMysql: {
adapter : 'sails-mysql',
host : 'localhost',
port : 3306,
user : 'mySQLUser',
password : 'MyAwesomePassword',
database : 'testDB'
}
},
models: {
connection: 'testMysql',
migrate: 'drop'
}
*/
}, function(err, server) {
sails = server;
if (err) return done(err);
User.create({firstName:"Bob", lastName: "Balaban", password:"12345", email:"bob@bob.com"})
.exec(function(err, createdUser) {
if (err) {
console.log("Failed to create user! Error below:");
console.log(err);
}
else {
console.log("User created successfully:");
console.log(user);
}
done(err, sails);
})
});
});