0

タイトルが正しいかどうかわかりませんが、やりたいことは次のとおりです。

私はこのコードを持っています

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

基本的に、ユーザーが初めて入ったときに MovieService が呼び出され、count5 回になるまで呼び出されます。再帰ループのようなものです。このコードをテストしたい場合、Jasmine で連鎖スタブを実行する方法がわかりません。Mockitoでも同様のことができます。

ここまでが私のテストです。

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

しかし、2 番目、3 番目、4 番目、5 番目の呼び出しをテストしたい場合。それ、どうやったら出来るの?Jasmine は Mockito のようなものを提供していますか? または、純粋なjavascriptでそれを行うにはどうすればよいですか?

どうもありがとう。

4

1 に答える 1

1

スパイ、スタブ、モックのメソッドを提供し、Jasmine と互換性のあるライブラリであるSinonをご覧になることをお勧めします。

コールバックを自動的に呼び出すには、stub.yields()またはを使用しますstub.yieldsTo()。またspy.getCall(n)、メソッドが呼び出された方法を確認できるようになりますn。Sinon は、スタブもスパイになるように記述されています... したがって、movieService のスタブを作成すると、 と の両方にアクセスできyields()ますgetCall(n)

于 2013-08-06T16:47:06.530 に答える