2017-08-22 4 views
1

Tentative d'unité de tester une méthode statique qui renvoie une instance d'un objet avec les arguments donnés. Je voudrais seulement tester les propriétés passées dans cette méthode parce que l'objet a des champs auto-peuplés comme createdAt que je voudrais exclure.Mocha: comparer deux objets, exclure des champs tels que createdAt

Dois-je tester des propriétés individuelles dans ce cas en utilisant quelque chose comme expect().to.have.property(), ou y a-t-il une solution d'une ligne?

http://chaijs.com/api/bdd/#method_property

+0

L'une des solutions possibles est d'obtenir la liste de tous les champs 'expected' objet et supprimer de' actual' objet tous champs, attendez 'expectedFields'. Après cela, affirmez-les. – alexmac

+0

@alexmac Ça sonne bien. – musicliftsme

Répondre

1

J'ai créé un module Node.js exactement pour cette tâche: validate seuls les champs qui sont fournis dans l'objet prévu.

Dans l'exemple ci-dessous, je veux comparer deux objets: actual (il a été retourné par test) et expected (résultat attendu). Certains des champs dans actual sont générés automatiquement, (_id), donc j'ai besoin de vérifier seulement qu'ils existent et ont un format spécial. Certains des champs que je ne veux pas comparer (téléphone avec le type work, account.number). Donc expected objet contient uniquement les champs requis pour le test:

// Some test method returns this object 
let actual = { 
    _id: '5945bf36ccb3fa0011e8533c', 
    name: 'John', 
    email: '[email protected]', 
    phones: [ 
    { type: 'mobile', number: '1234567' } 
    { type: 'work', number: '567382' } 
    ], 
    account: { 
    number: '11111', 
    registered: '2010-04-21' 
    }, 
    createdAt: '2017-02-03' 
}; 

// Ned to do the following assertions: 
// _id is exists 
// name and email match 
// mobile phone is exists and it's a number 
// account registered match 
let expected = { 
    _id: '_mock_', 
    name: 'John', 
    email: '[email protected]', 
    phones: [ 
    { type: 'mobile', number: /^d{1,10}$/ } 
    ], 
    account: { 
    registered: '2010-04-21' 
    } 
} 

nassert.assert(actual, expected); // should pass 

Le lien: n-assert