Mam obiekt, który można rozszerzyć wzdłuż testowanego zachowania, ale chcę się upewnić, że oryginalne właściwości nadal istnieją.
var example = {'foo':'bar', 'bar':'baz'}
var result = extendingPipeline(example)
// {'foo':'bar', 'bar':'baz', 'extension': Function}
expect(result).toEqual(example) //fails miserably
Chciałbym mieć dopasowanie, które przejdzie w tym przypadku w następujący sposób:
expect(result).toInclude(example)
Wiem, że mogę napisać niestandardowego dopasowania, ale wydaje mi się, że jest to tak powszechny problem, że rozwiązanie powinno już istnieć. Gdzie mam tego szukać?
javascript
unit-testing
jasmine
iwein
źródło
źródło
Odpowiedzi:
Jasmine 2.0
Ponieważ ta poprawka: https://github.com/pivotal/jasmine/commit/47884032ad255e8e15144dcd3545c3267795dee0 działa nawet na obiektach zagnieżdżonych, wystarczy owinąć każdy obiekt, który chcesz częściowo dopasować
jasmine.objectContaining()
Prosty przykład:
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}) })); });
źródło
Object.keys(obj)
zamiast swoich obiektów?Miałem ten sam problem. Właśnie wypróbowałem ten kod, działa dla mnie:
expect(Object.keys(myObject)).toContain('myKey');
źródło
Nie sądzę, żeby to było takie powszechne i nie sądzę, żebyś mógł znaleźć. Po prostu napisz:
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; } }); });
źródło
Pomyślałem, że zaproponowałbym alternatywę przy użyciu nowoczesnej mapy javascript i operatora rest. Jesteśmy w stanie pominąć właściwości za pomocą destrukturyzacji z operatorem rest. Zobacz dalszy opis w tym artykule .
var example = {'foo':'bar', 'bar':'baz'} var { extension, ...rest } = extendingPipeline(example) expect(rest).toEqual(example)
źródło