Ich habe ein Objekt, das möglicherweise entlang meines zu testenden Verhaltens erweitert wird, möchte jedoch sicherstellen, dass die ursprünglichen Eigenschaften noch vorhanden sind.
var example = {'foo':'bar', 'bar':'baz'}
var result = extendingPipeline(example)
// {'foo':'bar', 'bar':'baz', 'extension': Function}
expect(result).toEqual(example) //fails miserably
Ich hätte gerne einen Matcher, der in diesem Fall wie folgt passt:
expect(result).toInclude(example)
Ich weiß, dass ich einen benutzerdefinierten Matcher schreiben kann, aber es scheint mir, dass dies ein so häufiges Problem ist, dass es bereits eine Lösung geben sollte. Wo soll ich danach suchen?
javascript
unit-testing
jasmine
iwein
quelle
quelle
Antworten:
Jasmin 2.0
Da dieses Update: https://github.com/pivotal/jasmine/commit/47884032ad255e8e15144dcd3545c3267795dee0 sogar für verschachtelte Objekte funktioniert, müssen Sie nur jedes Objekt einschließen, in das Sie teilweise passen möchten
jasmine.objectContaining()
Einfaches Beispiel:
it('can match nested partial objects', function () { var joc = jasmine.objectContaining; expect({ a: {x: 1, y: 2}, b: 'hi' }).toEqual(joc({ a: joc({ x: 1}) })); });
quelle
Object.keys(obj)
anstelle Ihrer Objekte direkt zu vergleichen ?Ich hatte das gleiche Problem. Ich habe gerade diesen Code ausprobiert, er funktioniert für mich:
expect(Object.keys(myObject)).toContain('myKey');
quelle
Ich denke nicht, dass es so häufig ist und ich glaube nicht, dass Sie eines finden können. Schreiben Sie einfach eine:
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; } }); });
quelle
Ich dachte, ich würde eine Alternative mit modernen Javascript-Karten und Ruheoperatoren anbieten. Wir können Eigenschaften durch Destrukturierung mit Rest Operator weglassen. Siehe weitere Beschreibung in diesem Artikel .
var example = {'foo':'bar', 'bar':'baz'} var { extension, ...rest } = extendingPipeline(example) expect(rest).toEqual(example)
quelle