Dick's Phone Screen

by prakgarnly

HTML

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine-html.js"></script>
<title>Jasmine Spec Runner</title>

JavaScript

var model = {
    find  : function(term){
        return[{id:1},{id:2},{id:4},{id:5}];
    },
    findOne : function(term){
        return {id:3};
    },
    update : function(data, values){
        return data;
    }
}

var control = {
    data : [],
    init : function(myModel){
        this.data = myModel.find('3');
     }
}

/* */


describe('Jasmine Spy/Mock exercise', function () {

    it('has no spies and calls the real functions', function () {
        var mine = control;
        mine.init(model)

        expect(mine.data.length).toBe(4);
        expect(mine.data[0].id).toBe(1);
    });

    it('spies and returns faked object', function () {
        spyOn(model, 'find').andReturn([{id:4}]);
        
        var mine = control;
        mine.init(model)

        expect(mine.data.length).toBe(1);
        expect(mine.data[0].id).toBe(4);
        expect(model.find).toHaveBeenCalledWith('3');
    });

   
    it('spy and call a function', function () {
        spyOn(model, 'find').andCallFake(function(term){
            return [{id:56}];
        });
        
        var mine = control;
        mine.init(model)

        expect(mine.data.length).toBe(1);
        expect(mine.data[0].id).toBe(56);
        expect(model.find).toHaveBeenCalledWith('3');
    });

    it('spy and call thru', function () {
        spyOn(model, 'find').andCallThrough();
        
        var mine = control;
        mine.init(model)

        expect(mine.data.length).toBe(4);
        expect(mine.data[0].id).toBe(1);
        expect(model.find).toHaveBeenCalledWith('3');
    });
   
    
});


// load jasmine htmlReporter
$(function() {
  var env = jasmine.getEnv();
  env.addReporter(new jasmine.HtmlReporter());
  env.execute();
});