如何在Sails测试中成功实例化db模型

时间:2015-12-09 01:51:37

标签: unit-testing sails.js mocha

我一直在关注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>

1 个答案:

答案 0 :(得分:2)

您需要等待User中的before使用done回调函数参数创建,并在完成设置测试环境后调用它。此外,尽管文档敦促您这样做,但您并没有因为某些原因在这里举起风帆。我还建议使用测试数据库而不是普通数据库,这样您的测试数据就不依赖于您的生产/开发数据。

以下示例代码。添加doneexec回调可能是最重要的部分。

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