2017-08-21 4 views
-3

Mes codes:qu'est ce que `this` dans sinon.test() dans les tests de moka?

it('should', sinon.test(function() { 
    console.log(this); // what `this` refer here? 
    ... 
})); 

Dans le code ci-dessus, ce this font référence dans la fonction sinon.test()?

J'ai essayé de vous connecter, mais a obtenu l'erreur:

TypeError: Converting circular structure to JSON

Version Sinon: 1.17.6

Tous les commentaires bienvenus. Merci.

MISE À JOUR

après avoir lu la réponse ci-dessous, je suis encore confus. Pourquoi les deux codes suivants fonctionnent-ils lorsque this.myOnject.log a été écrasé une seule fois?

it('should', sinon.test(function() { 
    const stubLog = this.stub(this.myObject.log, 'warn'); 
    // ... 
    this.myObject.process(); 
    // expect codes... 
    })); 


    it('should', sinon.test(function() { 
    const stubLog = sinon.stub(this.myObject.log, 'warn'); 
    // ... 
    this.myObject.process(); 
    // expect codes... 
    })); 

MISE À JOUR

Si downvoted, s'il vous plaît laisser des commentaires pour me faire savoir pourquoi vous downvoted. Je suis très confus par la question que j'ai posté. Mais je suis plus confus pourquoi tant de gens ont downvoted, mais n'a pas laissé de commentaires utiles.

Répondre

0

sinon.test crée une nouvelle Sinon sandbox pour votre test et AUGMENTE l'objet this normal que Mocha passe à votre test avec des méthodes spécifiques comme spy, Sinon stub, etc. qui appellent les méthodes correspondantes sur le bac à sable qui est automatiquement créé. Le fait qu'il augmente l'objet vous permet d'utiliser toutes les méthodes Mocha courantes que Moka fournit normalement sur this, et vous permet de définir des valeurs sur des champs arbitraires. La méthode restore du sandbox est appelée automatiquement à la fin du test. C'est un moyen pratique de fournir une isolation entre les tests de sorte que les modifications apportées aux objets courants qu'un test effectue par Sinon n'affectent pas les autres tests.

Voici un exemple:

const sinon = require("sinon"); 

before(function() { 
    // We set "moo". 
    this.moo = "I'm a cow."; 
}); 

it("test", sinon.test(function() { 
    // We can access "stock" Mocha functions. 
    this.timeout(0); 

    // However, this is augmented with sinon functions. 
    const spy = this.spy(); 
    spy(); 

    // We can access "moo"; 
    console.log("value of moo", this.moo); 
})); 

Ce produit:

value of moo I'm a cow. 
    ✓ test 

    1 passing (34ms) 

Le code ci-dessus suppose 1.x Sinon Dans Sinon 2.x et plus sinon.test n'est plus groupé avec Sinon mais est son propre package séparé.

+0

Merci. Quelles sont les différences entre 'sinon.stub()' et 'this.stub()' dans 'sinon.test()'? – BAE

+0

La différence est que 'this.stub()' dans 'sinon.test()' utilise le sandbox. Si vous appelez simplement 'sinon.stub()' vous ne bénéficiez pas de la sanbox et vous devez effectuer vous-même le nettoyage nécessaire. – Louis