web-dev-qa-db-fra.com

Y a-t-il un matcher jasmine pour comparer des objets sur des sous-ensembles de leurs propriétés

J'ai un objet qui peut être étendu tout au long de mon comportement sous test, mais je veux m'assurer que les propriétés d'origine sont toujours présentes.

var example = {'foo':'bar', 'bar':'baz'}

var result = extendingPipeline(example)
// {'foo':'bar', 'bar':'baz', 'extension': Function}

expect(result).toEqual(example) //fails miserably

J'aimerais avoir un matcher qui passerait dans ce cas, du type:

expect(result).toInclude(example)

Je sais que je peux écrire un matcher personnalisé, mais il me semble que le problème est si courant qu’une solution devrait déjà exister. Où devrais-je le chercher?

59
iwein

J'ai eu le même problème. Je viens d'essayer ce code, ça marche pour moi: 

expect(Object.keys(myObject)).toContain('myKey');
7
Chicna

Je ne pense pas que ce soit si courant et je ne pense pas que vous puissiez en trouver un. Il suffit d'écrire un:

beforeEach(function () {
    this.addMatchers({
        toInclude: function (expected) {
            var failed;

            for (var i in expected) {
                if (expected.hasOwnProperty(i) && !this.actual.hasOwnProperty(i)) {
                    failed = [i, expected[i]];
                    break;
                }
            }

            if (undefined !== failed) {
                this.message = function() {
                    return 'Failed asserting that array includes element "'
                        + failed[0] + ' => ' + failed[1] + '"';
                };
                return false;
            }

            return true;
        }
    });
});
1
Wouter J

Je pensais que je pourrais offrir une alternative en utilisant une carte moderne javascript et un opérateur de repos. Nous pouvons omettre des propriétés en utilisant la déstructuration avec l'opérateur de repos. Voir la description plus détaillée dans cet article

var example = {'foo':'bar', 'bar':'baz'}

var { extension, ...rest } = extendingPipeline(example)

expect(rest).toEqual(example)
0