2015-09-15 9 views
5

Ich möchte einige Hilfe, um festzustellen, warum mein Unit-Test in einer sails.js App nicht wie erwartet funktioniert.Bluebird Promise jeder in Mokka/Chai-Test funktioniert nicht

Ich verwende Mokka, Chai und Bluebird Versprechen Bibliothek auf einer sails.js App.

Was will ich erreichen:

  • einen Test erstellen für TagsService.create (Name) -Methode, die einen Namen Parameter akzeptiert.
  • -Test, dass diese Methode einen neuen Tag Datensatz nicht auf ungültige Namen erstellen will ich
  • Der Name Parameter ist erforderlich und sollte weniger als 121 Zeichen

Was zur Zeit lang passieren ich habe:

// Test the 'create' method 
 
describe('Method \'create\' test result: \n', function() { 
 
    
 
    // Test that name is required and less than 121 chars long 
 
    it('Must receive the name parameter and be less than 121 chars long', function(done) { 
 
\t \t 
 
    // It should not accept any of the following names 
 
    var names = ['',' ','thisstringislongerthanthemaxof121characterslongthisstringislongerthanthemaxof121characterslongthisstringislongerthanthema',[],[{}],[{test: 'test'}],'wrongchars*[]$£%fsf','$%@~}[','£$%jkdfi',' $%"£asdwdFDE','hD8U £$&{DS ds']; 
 
    
 
    
 
     sails.bluebird.each(names,function(name){ 
 
     TagsService.create(name).then(function(data){ 
 
      assert.propertyVal(data,'status','err','An error was NOT returned - even though names provided should be invalid'); 
 
     }); 
 
     }).then(function(){ 
 
     done(); 
 
     }); 
 
    
 
\t \t 
 
    }); 
 
    
 
});

Was passiert ist, es scheint zu bestehen, selbst wenn ich einen gültigen Namen übergebe oder null von der Methode zurückgebe.

Antwort

5

Nun, sieht aus wie ich es geschafft habe, nach viel Versuch und Irrtum zu lösen.

Stellt sich heraus, ich muss den Rückruf done() von der Verheißung nach jeder ausgeführten Methode abfangen. Wird auch benötigt, um das Ergebnis der Tests aus dem TagService-Verspre- chen zurückzugeben. (Immer noch nicht 100% sicher, das ist der richtige Weg, darüber nachzudenken ..). Trotzdem scheint der Test jetzt richtig zu funktionieren.

Hier ist mein Ergebnis:

var names = ['',' ','thisstringislongerthanthemaxof121characterslongthisstringislongerthanthemaxof121characterslongthisstringislongerthanthema',[],[{}],[{test: 'test'}],'wrongchars*[]$%fsf','$%@~}[','�$%jkdfi',' $%"�asdwdFDE','hD8U �$&{DS ds']; 
 
\t \t \t 
 
sails.bluebird.each(names, function(name){ 
 
    return TagsService.create(name).then(function(data) { 
 
\t assert.property(data, 'status', 'create method did not return a status property'); 
 
\t assert(data.status === 'err', 'even with an invalid name parameter passed - it did not return an err status, which it must do with an invalid name.'); 
 
    }); 
 
}).then(function(){ 
 
\t done(); 
 
}).catch(done);

+0

Siehe auch https://github.com/domenic/chai-as-promised –

Verwandte Themen