2016-06-17 17 views
1

Ich schreibe einige Integrationstests um einige Sequelize (JS ORM) -Code. Die meisten Sequelize-Funktionsaufrufe geben Promises zurück, mit denen ich nicht viel gearbeitet habe. Gibt es einen klareren Weg, den folgenden Testfall zu schreiben?Gibt es einen klareren Weg, mit verketteten Versprechen umzugehen?

it('can add a membership to a user, and user will receive membership.', function() { 
return db.Sequelize.Promise.join(

    User.create({ firstName: 'foo', lastName: 'bar', 
    identifier: 'foobar', password: 'whatever', }), 

    Membership.create({ displayName:'Iron Maiden',role:'somerole' }), 

    // This is the part I'd like to improve the clarity of, 
    // if possible. 
    function(expectedUser, membership) { 
    return membership.setUser(expectedUser).then(
     function(updatedMembership) { 
     return updatedMembership.getUser().then(
      function(actualUser) { 
      return assert.equal(actualUser.id, expectedUser.id); 
      }) 
     }) 
    }) 
}); 
+2

Dieser Artikel hilft wirklich mit dem Versprechen, und beschäftigt sich mit Ihrem Problem: http://taoofcode.net/promise-anti-patterns/. – Paul

Antwort

2
function(expectedUser, membership) { 
    return membership.setUser(expectedUser) 
     .then(function(updatedMembership) { 
      return updatedMembership.getUser(); 
     }) 
     .then(function(actualUser) { 
      return assert.equal(actualUser.id, expectedUser.id); 
     }); 
}); 
Verwandte Themen