Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot unit test my model in sailsjs

For my sails app I'm using the following code to unit test the User model but got the error message:

'TypeError: Object # has no method 'create''

var User = require('../../api/models/User');
var Sails = require('sails');

console.log(User);

describe("User Model:", function() {  

  // create a variable to hold the instantiated sails server
  var app;

  // Global before hook
  before(function(done) {

    // Lift Sails and start the server
    Sails.lift({

      log: {
        level: 'error'
      },

    }, function(err, sails) {
      app = sails;
      done(err, sails);
    });
  });

  // Global after hook
  after(function(done) {
    app.lower(done);
  });

  describe("Password encryption", function() {

    describe("for a new user", function() {
      var user;
      before(function (cb) {
        var userData = {
          email: "[email protected]",
          password: "test_password",
          passwordConfirmation: "test_password"
        };

        User.create(userData, function (err, newUser) {
          if (err) return cb(err);
          user = newUser;
          cb();
        });
      });

      it("must encrypt the password", function() {
        user.must.have.property('encryptedPassword');
        user.must.not.have.property('password');
        user.must.not.have.property('passwordConfirmation');
      });

      after(function (cb){
        user.destroy(function (err) {
          cb(err);
        });
      });
  });

As it seems to me that sails is correctly lifted, what is the problem causing the create method not to be available ?

like image 752
Luc Avatar asked Jan 10 '14 15:01

Luc


1 Answers

Remove the first line:

var User = require('../../api/models/User');

Once Sails app is lifted, you will have your models available automatically, see here, for example.

And in your case, your first line overrides the User model which would be otherwise constructed by Sails.js, that's why even though you have an object it's not a Waterline model.

like image 74
bredikhin Avatar answered Sep 23 '22 04:09

bredikhin