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 回答