0

kinvey でユーザーを作成し、ユーザーが追加されたことをすべて角度テスト内でアサートする必要があります。カルマ テスト ランナーを使用しています。すべてのテストがタイムアウトし、kinvey promise ブロック内のコードが実行されていません。これらのテストを作成するにはどうすればよいですか? テストコードは以下です。

describe("Kinvey: Users", function() {

var key,
    secret;

beforeEach(function(){
    key = '...',
    secret = '...'


});


it("should create a user", function(done){


    var App = angular.module('App', ['kinvey']);

    App.run(['$kinvey', function($kinvey) {
    $kinvey.init({
        appKey: key,
        masterSecret: secret
    });

        var promise = $kinvey.DataStore.save('users', {
        username : 'gertrude@test.com'
        });

        promise().then(function(success){
            var query = new $kinvey.Query();
            query.equalTo('username', 'gertrude');
            var queryPromise = $kinvey.DataStore.find('users', query);
            return queryPromise().then(
                function(response){
                    console.log("response");
                    expect(response.username).to.equal("gertrude@test.com");

                    var destroyPromise = $kinvey.DataStore.destroy('users', response.id);

                    return destroyPromise().then(function(success){
                        return done();
                    }, function(error){
                        return done();
                    })
                }, function(error){
                    return null;
                })
        }, function(error){
            return null;
        });

    }]);
}); 
4

1 に答える 1

0

いくつか不足しています:

  • angular.bootstrap()への呼び出しがないため、runブロックは実行されません。
  • $kinvey.init()メソッドは非同期です。$kinvey.DataStore.save()そのため、 (またはその他のメソッドを)呼び出す前に$kinvey.*、init メソッドが終了していることを確認してください。
  • コレクションを使用$kinvey.DataStore.save()してユーザーを作成しているようです。users代わりに使用することを強くお勧めします$kinvey.User.signup()

先に進む最善の方法は、物事をbeforeフックに移動することです。

before(function(done) {
  this.App = angular.module('App', ['kinvey']);
  this.App.run(['$kinvey', function($kinvey) {
    $kinvey.init({
      appKey    : 'App Key',
      appSecret : 'App Secret'
    }).then(function() {
      done();
    }, function(error) {
      done(new Error(error.description));
    });
  }]);
  angular.bootstrap(document, ['kinvey']);
});

これで、テスト (itメソッド) で、次のようにして参照を取得できます$kinvey

var $injector = angular.injector(['ng', 'kinvey']);
$injector.invoke(function($kinvey) {
  // Do your tests with $kinvey.
});

テストしてください!ここに JSFiddle を配置します。

免責事項: 私はライブラリの作成者です。

于 2014-02-06T23:20:25.920 に答える