Ctrl and Resource test

http://angularjs.org/

by pkozlowski_opensource

HTML

<script src="https://raw.github.com/pivotal/jasmine/master/lib/jasmine-core/jasmine.js"></script>
<script src="https://raw.github.com/pivotal/jasmine/master/lib/jasmine-core/jasmine-html.js"></script>
<script src="http://code.angularjs.org/1.0.1/angular-1.0.1.js"></script>
<script src="http://code.angularjs.org/1.0.1/angular-mocks-1.0.1.js"></script>

CSS

body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }

#TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ }
#TrivialReporter a:visited, #TrivialReporter a { color: #303; }
#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; }
#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; }
#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; }
#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; }
#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; }
#TrivialReporter .runner.running { background-color: yellow; }
#TrivialReporter .options { text-align: right; font-size: .8em; }
#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; }
#TrivialReporter .suite .suite { margin: 5px; }
#TrivialReporter .suite.passed { background-color: #dfd; }
#TrivialReporter .suite.failed { background-color: #fdd; }
#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; }
#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; }
#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; }
#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; }
#TrivialReporter .spec.skipped { background-color: #bbb; }
#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; }
#TrivialReporter .passed { background-color: #cfc; display: none; }
#TrivialReporter .failed { background-color: #fbb; }
#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; }
#TrivialReporter .resultMessage span.result { display:...

JavaScript

angular.module('MyApp', []).factory('MyService', function($http) {

    var MyService = {
        addStatement: function(user, action, object) {
            var statement = {
                user: user,
                action: action,
                object: object
            };
            $http({
                method: 'POST',
                url: '/foo/bar',
                data: statement,
                headers: {
                    Authorization: 'Basic YWxhZGRpbjpvcGVuIHNlc2FtZQ=='
                }
            }).success(function(data) {
                console.log("success: " + data);
            });
        }
    };

    return MyService;
});

//Test code
describe('Testing a service', function() {

    var service, $httpBackend;

    //you need to indicate your module in a test
    beforeEach(module('MyApp'));
    beforeEach(inject(function(MyService, _$httpBackend_) {
        service = MyService;
        $httpBackend = _$httpBackend_;
    }));

    it('should invoke service with right paramaeters', function() {
        $httpBackend.expectPOST('/foo/bar', {
            "user": "testUser",
            "action": "testAction",
            "object": {}
        }, function(headers){
            return headers.Authorization === 'Basic YWxhZGRpbjpvcGVuIHNlc2FtZQ==';
        }).respond({});
        service.addStatement('testUser', 'testAction', {});
        $httpBackend.flush();
    });

    afterEach(function() {
        $httpBackend.verifyNoOutstandingExpectation();
        $httpBackend.verifyNoOutstandingRequest();
    });

});


// KICK OFF JASMINE
var jasmineEnv = jasmine.getEnv();
var trivialReporter = new jasmine.TrivialReporter();

jasmineEnv.addReporter(trivialReporter);

jasmineEnv.specFilter = function(spec) {
    return trivialReporter.specFilter(spec);
};

jasmineEnv.execute();