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

       ...