2017-03-21 3 views
0

Ich habe einige Tests für Parse konfiguriert, aber ich weiß nicht, wie in Parse.Cloud.run den authentifizierten Benutzer setzen:Wie wurde ein authentifizierter Benutzer in Parse-Tests festgelegt?

it('set user authenticated', function(done) { 
    var user = new Parse.User({username: 'example2', password: 'example'}); 
    user.save(); 
    Promise.resolve() 
    .then(function() { 
    return Parse.Cloud.run('thread', { user: { id: user.id } }); 
    }) 
}); 

So in der Cloud-Funktion ich request.user.id habe und es wirft Undefined request.user

Weitere Informationen: https://github.com/ParsePlatform/parse-server/issues/2488

Antwort

0

Es ist ein Fehler, wie Sie verspricht in Ihrem Code verwenden oben:

user.save(); 
Promise.resolve() 
    .then(function() { 
    return Parse.Cloud.run('thread', { user: { id: user.id } }); 
    }) 

Sie möchten nicht Promise.resolve().then() verwenden. Sie würden wollen user.save().then()

Unten sind zwei Sätze von Arbeitseinheit Test, dass ich denke, Übungen, was Sie wollen.

dieser erstes gibt den Benutzer-ID als Parameter:

describe('pass parameters to cloud code',() => { 
    // set up the cloud code function 
    beforeEach(() => { 
    Parse.Cloud.define('thread', (request, response) => { 
     // just return the user id that passed in so we can test it. 
     response.success(request.params.user.id); 
    }); 
    }); 

    it('should pass parameters', (done) => { 
    const user = new Parse.User({ 
     username: 'example2', 
     password: 'example' 
    }); 

    user.save() 
     .then(() => Parse.Cloud.run('thread', { user: { id: user.id } })) 
     .then((result) => expect(result).toBe(user.id)) 
     .then(done) 
     .catch(done.fail); 
    }); 
}); 

und diese zweite Reihe von Tests zeigt, wie ein authentifizierter Benutzercode Wolke übergeben wird.

describe('user in cloud code unit test',() => { 
    beforeEach(() => { 
    Parse.Cloud.define('thread', (request, response) => { 
     const result = request.user 
     ? request.user 
     : 'no user set'; 
     response.success(result); 
    }); 
    }); 

    it('should not have a user', (done) => { 
    Parse.Cloud.run('thread') 
     .then(result => expect(result).toBe('no user set')) 
     .then(done) 
     .catch(done.fail); 
    }); 

    it('should get the logged in user', (done) => { 
    Parse.User.signUp('Alice', 'Password', { name: 'value' }) 
     // note that we don't have to pass the logged in user 
     // if there is a logged in user, it'll be in request.user   
     .then(() => Parse.Cloud.run('thread')) 
     .then(userAsResult => expect(userAsResult.get('username', 'Alice'))) 
     .then(done) 
     .catch(done.fail); 
    }); 
}); 
+0

Dank, ich brauchte es im Test zu schicken, nicht, wenn es der Benutzer die aktuelle – MaicolBen

+0

ok, Antwort mit einem tatsächlichen Test Idiom I wies mit dem Code bearbeitet. –

+0

Super Arbeit! aber das hebt die wirkliche Funktion auf, und ich kann das echte nicht testen. Auch wenn Sie '{user: {id: user.id}}' senden, wird es in der Cloud-Funktion in 'request.params.user.id', nicht in' request.user' gelesen. – MaicolBen

Verwandte Themen