JSFiddle - React, Tailwind, and code Playground
by Mike Kotsur
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Jasmine Test Runner</title>
<link rel="stylesheet" type="text/css" href="http://angular.github.com/peepcode-tunes/test-js/lib/jasmine/jasmine.css">
<script type="text/javascript" src="http://angular.github.com/peepcode-tunes/test-js/lib/jasmine/jasmine.js"></script>
<script type="text/javascript" src="http://angular.github.com/peepcode-tunes/test-js/lib/jasmine/jasmine-html.js"></script>
<!-- include source files here... -->
<script src="http://code.angularjs.org/1.0.0rc2/angular-1.0.0rc2.min.js"></script>
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://angular.github.com/peepcode-tunes/test-js/lib/angular-mocks.js"></script>
</head>
<body>
<script type="text/javascript">
</script>
</body>
</html>
JavaScript
angular.module('HomePageModule', []).factory('facebookConnect', function() {
return new function() {
this.askFacebookForAuthentication = function(fail, success) {
FB.login(function(response) {
if (response.authResponse) {
FB.api('/me', success);
} else {
fail('User cancelled login or did not fully authorize.');
}
});
}
}
});
function ConnectCtrl(facebookConnect, $scope, $resource) {
$scope.user = {}
$scope.error = null;
$scope.registerWithFacebook = function() {
facebookConnect.askFacebookForAuthentication(
function(reason) { // fail
$scope.error = reason;
}, function(user) { // success
$scope.user = user
$scope.$digest() // Manual scope evaluation
});
}
}
ConnectCtrl.$inject = ['facebookConnect', '$scope', '$resource'];
// TEST STARTS HERE //
describe('connect.controller', function() {
var facebookConnectMock
beforeEach(module(function($provide) {
facebookConnectMock = {}
$provide.value('facebookConnect', facebookConnectMock)
}));
it('should update user from facebook when result is success', inject(function($controller, $rootScope) {
ctrlScope = $rootScope.$new();
$controller(ConnectCtrl, {
$scope: ctrlScope
});
expect(ctrlScope.user).toEqual({})
facebookConnectMock.askFacebookForAuthentication = function(f, s) {
s({
'name': "someUser"
})
}
ctrlScope.registerWithFacebook();
expect(ctrlScope.user.name).toEqual("someUser")
}))
it('should not update user from facebook when result is fail', inject(function($controller, $rootScope) {
ctrlScope = $rootScope.$new();
$controller(ConnectCtrl, {
$scope: ctrlScope
});
...