Tengo un objeto que puede extenderse a lo largo de mi comportamiento bajo prueba, pero quiero asegurarme de que las propiedades originales todavía estén allí.
var example = {'foo':'bar', 'bar':'baz'}
var result = extendingPipeline(example)
// {'foo':'bar', 'bar':'baz', 'extension': Function}
expect(result).toEqual(example) //fails miserably
Me gustaría tener un comparador que pase en este caso, en la línea de:
expect(result).toInclude(example)
Sé que puedo escribir un comparador personalizado, pero me parece que este es un problema tan común que ya debería haber una solución. ¿Dónde debo buscarlo?
javascript
unit-testing
jasmine
iwein
fuente
fuente
Respuestas:
Jazmín 2.0
Desde esta solución: https://github.com/pivotal/jasmine/commit/47884032ad255e8e15144dcd3545c3267795dee0 incluso funciona en objetos anidados, solo necesita envolver cada objeto que desea hacer coincidir parcialmente en
jasmine.objectContaining()
Ejemplo simple:
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}) })); });
fuente
Object.keys(obj)
lugar de tus objetos directamente?Tuve el mismo problema. Acabo de probar este código, funciona para mí:
expect(Object.keys(myObject)).toContain('myKey');
fuente
No creo que sea tan común y no creo que puedas encontrar uno. Solo escribe uno:
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; } }); });
fuente
Pensé que ofrecería una alternativa utilizando un mapa de JavaScript moderno y un operador de descanso. Podemos omitir propiedades usando desestructuración con operador de reposo. Consulte una descripción más detallada en este artículo .
var example = {'foo':'bar', 'bar':'baz'} var { extension, ...rest } = extendingPipeline(example) expect(rest).toEqual(example)
fuente