I wrote a mocha script for testing my phonegap app. Here is the code:
var AccountController = require('../controllers/account.js'),
mongoose = require('mongoose'),
should = require('should'),
uuid = require('node-uuid'),
crypto = require('crypto'),
User = require('../models/user.js'),
UserMock = require('./user-mock.js'),
MailerMock = require('./mailer-mock.js'),
ApiMessages = require('../models/api-messages.js');
var session = {};
describe('AccountController', function() {
var controller,
seedUsersCount = 10,
testUser,
userModelMock,
mailMock;
});
beforeEach(function(done) {
userModelMock = new UserMock();
mailerMock = new MailerMock();
controller = new AccountController(userModelMock, session, mailerMock);
done();
});
afterEach(function(done) {
userModelMock.setError(false);
done();
});
it('Retus db error', function(done) {
userModelMock.setError(true);
userModelMock.seedUsers();
var testUser = userModelMock.getTestUser(),
testUserPassword = 'Password0';
controller.logon(testUser.email, testUserPassword, function(err, apiResponse) {
should(apiResponse.success).equal(false);
should(apiResponse.extras.msg).equal(ApiMessages.DB_ERROR);
done();
});
});
it('Creates user session', function(done) {
userModelMock.seedUsers();
var testUser = userModelMock.getTestUser(),
testUserPassword = 'Password0';
controller.logon(testUser.email, testUserPassword, function(err, apiResponse) {
if (err) retu done(err);
should(apiResponse.success).equal(true);
should.exist(apiResponse.extras.userProfileModel);
should.exist(controller.getSession().userProfileModel);
should(apiResponse.extras.userProfileModel)
.equal(controller.getSession().userProfileModel);
done();
});
});
it('Retus "Email not found"', function(done) {
userModelMock.seedUsers();
var testUser = userModelMock.getTestUser(),
testUserPassword = 'Password0',
nonExistentEmailAddress = 'test';
controller.logon(nonExistentEmailAddress, testUserPassword, function(err, apiResponse) {
if (err) retu done(err);
should(apiResponse.success).equal(false);
should(apiResponse.extras.msg)
.equal(ApiMessages.EMAIL_NOT_FOUND);
done();
});
});
it('Retus "Invalid password"', function(done) {
userModelMock.seedUsers();
var testUser = userModelMock.getTestUser(),
invalidPassword = 'Password';
controller.logon(testUser.email, invalidPassword, function(err, apiResponse) {
if (err) retu done(err);
should(apiResponse.success).equal(false);
should(apiResponse.extras.msg)
.equal(ApiMessages.INVALID_PWD);
done();
});
});
describe('#logoff', function() {
it('Destroys user session', function(done) {
controller.logoff();
should.not.exist(controller.getSession().userProfileModel);
done();
});
});
describe('#register', function() {
it('Retus db error', function(done) {
userModelMock.setError(true);
userModelMock.seedUsers();
var testUser = userModelMock.getTestUser();
controller.register(testUser, function(err, apiResponse) {
should(apiResponse.success).equal(false);
should(apiResponse.extras.msg)
.equal(ApiMessages.DB_ERROR);
done();
});
});
});
it('Retus "Email already exists"', function(done) {
userModelMock.seedUsers();
var testUser = userModelMock.getTestUser();
controller.register(testUser, function(err, apiResponse) {
should(apiResponse.success).equal(false);
should(apiResponse.extras.msg)
.equal(ApiMessages.EMAIL_ALREADY_EXISTS);
done();
});
});
it('Retus "Could not create user"', function(done) {
var testUser = new UserMock();
testUser.setNumberAffected(0);
controller.register(testUser, function(err, apiResponse) {
if (err) retu done(err);
should(apiResponse.success).equal(false);
should(apiResponse.extras.msg)
.equal(ApiMessages.COULD_NOT_CREATE_USER);
done();
});
});
it('Registers a user', function(done) {
var testUser = new UserMock();
testUser.setNumberAffected(1);
controller.register(testUser, function(err, apiResponse) {
if (err) retu done(err);
should(apiResponse.success).equal(true);
done();
});
});
describe('#resetPassword', function() {
it('Retus db error', function(done) {
userModelMock.setError(true);
userModelMock.seedUsers();
var testUser = userModelMock.getTestUser();
controller.resetPassword(testUser.email, function(err, apiResponse) {
should(apiResponse.success).equal(false);
should(apiResponse.extras.msg)
.equal(ApiMessages.DB_ERROR);
done();
});
});
});
it('Sets "passwordResetHash" session', function(done) {
userModelMock.seedUsers();
var testUser = userModelMock.getTestUser();
controller.resetPassword(testUser.email, function(err, apiResponse) {
if (err) retu done(err);
should(apiResponse.success).equal(true);
should.exist(controller.getSession().passwordResetHash);
should.exist(apiResponse.extras.passwordResetHash);
should(controller.getSession()
.emailWhoRequestedPasswordReset).equal(testUser.email);
should(controller.getSession()
.passwordResetHash).equal(apiResponse.extras.passwordResetHash);
done();
})
});
it('Retus "Email not found"', function(done) {
userModelMock.seedUsers();
var testUser = userModelMock.getTestUser(),
nonExistentEmailAddress = 'dummy@email.com';
controller.resetPassword(nonExistentEmailAddress, function(err, apiResponse) {
if (err) retu done(err);
should(apiResponse.success).equal(false);
should(apiResponse.extras.msg)
.equal(ApiMessages.EMAIL_NOT_FOUND);
done();
})
});
I got this error when I ran mocha in terminal:
1) Retus "Email not found":
AssertionError: expected true to be false
+ expected - actual
-true
+false
at Assertion.fail (D:PhoneGap_Projectsloginwwwserveode_modulesshouldlibassertion.js:92:17)
at Assertion.Object.defineProperty.value (D:PhoneGap_Projectsloginwwwserveode_modulesshouldlibassertion.js:164:1
at D:PhoneGap_Projectsloginwwwservertestaccount-controller-test.js:211:37
at D:PhoneGap_Projectsloginwwwservercontrollersaccount.js:186:16
at UserMock.findOne (D:PhoneGap_Projectsloginwwwservertestuser-mock.js:65:12)
at AccountController.resetPassword (D:PhoneGap_Projectsloginwwwservercontrollersaccount.js:166:18)
at Context.<anonymous> (D:PhoneGap_Projectsloginwwwservertestaccount-controller-test.js:208:16)
at callFnAsync (C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruable.js:338:8)
at Test.Ruable.run (C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruable.js:290:7)
at Ruer.runTest (C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruer.js:422:10)
at C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruer.js:533:12
at next (C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruer.js:342:14)
at C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruer.js:352:7
at next (C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruer.js:284:14)
at C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruer.js:315:7
at done (C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruable.js:276:5)
at C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruable.js:349:7
at Context.<anonymous> (D:PhoneGap_Projectsloginwwwservertestaccount-controller-test.js:25:5)
at callFnAsync (C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruable.js:338:8)
at Hook.Ruable.run (C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruable.js:290:7)
at next (C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruer.js:298:10)
at Immediate._onImmediate (C:UsersAjay Kulkai-enEXLAppDataRoamingnpmnode_modulesmochalibruer.js:320:5)
That error is happening in the following lines:
if (err) retu done(err);
should(apiResponse.success).equal(false);
should(apiResponse.extras.msg)
.equal(ApiMessages.EMAIL_NOT_FOUND);
done();
How can I fix that error?
