Mocking injected dependencies - aca-mobile/ti-unit GitHub Wiki
Suppose you want to test a controller, which depends on a library, eg.:
var UserManager = require('user.manager');
function onButtonClick() {
UserManager.setUserName($.username.getValue());
}
module.exports = {
test: {
onButtonClick: onButtonClick
}
}
You don't want to depend on the real user.manager implementation. Instead you want to create a mock so you have full control over the user.manager.
Define MockRequire and add a mock in the beforeEach function
MockRequire = require('tiunit/mockrequire');
var USER_NAME = "John Doe";
var userManagerMock = {
setUserName: function(){}
};
$ = {
username: {
getValue: function(){}
}
};
beforeEach(function () {
MockRequire.addMock('user.manager', userManagerMock);
controllerUnderTest = require('../app/controllers/authenticate');
});
afterEach(function(){
MockRequire.resetMocks();
});
it('should set the user name on the UserManager whenever the button is clicked', function(){
spyOn(userManagerMock, 'setUserName');
spyOn($.username, 'getValue').and.returnValue(USER_NAME);
controllerUnderTest.test.onButtonClick();
expect(userManagerMock.setUserName).toHaveBeenCalledWith(USER_NAME);
});