2017-04-20 7 views
1

Nous avons quelques tests de chai simples "est-ce vraiment fonctionne" d'une application électronique en utilisant spectron et WebdriverIO. Le code exemple nous avons commencé avec est dePourquoi ces tests chai échoueront-ils?

https://github.com/jwood803/ElectronSpectronDemo comme indiqué dans https://github.com/jwood803/ElectronSpectronDemo/issues/2, les tests promis chaï-en-ne rattrapent pas discordances, je pensais que je donc ajouter quelques tests supplémentaires pour savoir pourquoi Chai est pas de tests échoue lorsque les application électronique a un texte qui ne correspond pas au texte de test unitaire attendu.

Commençons par quelque chose de vraiment simple, le reste du code est à https://github.com/drjasonharrison/ElectronSpectronDemo

describe('Test Example', function() { 
    beforeEach(function (done) { 
     app.start().then(function() { done(); }); 
    }); 

    afterEach(function (done) { 
     app.stop().then(function() { done(); }); 
    }); 

    it('yes == no should fail', function() { 
     chai.expect("yes").to.equal("no"); 
    }); 

    it('yes == yes should succeed', function() { 
     chai.expect("yes").to.equal("yes"); 
    }); 

Le premier test unitaire échoue, le second réussit.

Et quand nous mettons l'affirmation en fonction, détecte encore l'échec:

it('should fail, but succeeds!?', function() { 
    function fn() { 
     var yes = 'yes'; 
     yes.should.equal('no'); 
    }; 
    fn(); 
}); 

Alors maintenant, dans le monde de l'électron, webdriverio et Spectron, le titre de l'application est censé être « Bonjour tout le monde! », ce qui devrait échouer, mais il passe:

it('tests the page title', function() { 
    page.getApplicationTitle().should.eventually.equal("NO WAY"); 
}); 

Hmm, essayons un test plus familier:

Sortie:

✓ should fail, waitUntilWindowLoaded, yes != no 
txt = Hello World! 

Il réussit? Quelle? Pourquoi? Comment?

Répondre

1

Trouvé! Si vous regardez https://github.com/webdriverio/webdriverio/blob/master/examples/standalone/webdriverio.with.mocha.and.chai.js

vous verrez que vous devez retourner la promesse de chacun des tests. Ceci est typique pour les tests async chaï/mocha:

it('tests the page title', function() { 
    return page.getApplicationTitle().should.eventually.equal("NO WAY"); 
}); 

Si vous faites cela, le test de chai est en fait évalué correctement.

+0

Je ne pense pas que webdriverio soit en faute ici. Cela ressemble au comportement que j'observe dans les tests de moka async, quand j'oublie de rendre la promesse. – Rhayene

+0

@Rhayene - correct, j'ai essayé de clarifier via un edit. –