0

I'm not sure if I'm writing the title correct, but here's what I want to do.

I have this code

    var callback = function(result) {
        if(result.count < 5) {
            msg_id = result.msg_id;
            MovieService.getMovies(msg_id, result.count).get(callback, error);
        }

        if(result.movies.length !== 0) {
            setDataToDisplay(result);
        }

        if(result.count === 5) {
            $scope.loading = false;
        }
    }

    MovieService.getMovies(msg_id, 0).get(callback, error);

Basically, when user comes in the first time MovieService will be called and it gets called until the count equals to 5 times. It's like a recursive loop. Now if I want to test this code, I don't know how to do chained stub in Jasmine. I could do something similar in Mockito.

Here's my test so far.

it("should give me the lot of movies", function() {
    var movie1 = new MovieBuilder().withTweetId('8').build();
    var movie2 = new MovieBuilder().withId('3812').withTweetId('8').build();
    var movie3 = new MovieBuilder().withId('3813').withTweetId('8').build();
    var movie4 = new MovieBuilder().withId('3814').withTweetId('8').build();


    movieService = {
        getMovies : function() {
            return { 
                get : function(callback, error) {
                    callback(
                    {
                        'msg_id' : '8',
                        'count' : '5',
                        'movies' : [movie1, movie2, movie3, movie4]
                    });
                }
            }
        }
    }

    ctrl = controller('MovieTwitterCtrl', {$scope : scope, MovieService : movieService});

    expect(scope.movie_groups[0].length).toBe(4);
    expect(scope.msg_id).toBe('8');
});

But if I want to test the second, third, fourth and fifth call. How do I do that? Does Jasmine offer something like Mockito? Or how do I do that in pure javascript?

Thanks a lot.

1 Answer 1

1

You might want to take a look at Sinon, which is a library that provides methods for spys, stubs and mocks and is compatible with Jasmine.

In order to automatically invoke your callbacks, you would use stub.yields() or stub.yieldsTo(). You've also got spy.getCall(n) that will let you verify the way your method was called during the nth time. Sinon is written in a way that stubs are also spies... so if you create a stub for your movieService, you'll have access to both yields() and getCall(n).

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.