Me preguntaba si hay una manera de lograr lo que quiero con RSpec. Así que quiero probar una matriz de hash que se parezca a esta:
array_example = [ { id: 1, link: "www.some-link.com/path_im_not_interested_in" }, { id: 2, link: "www.example-link.com/another_useless_path" } ] Quiero hacer una prueba de integración en la que no incluiré esas rutas en los enlaces. Solo me interesa verificar si www.some-link.com y www.example-link.com están presentes en esos hashes en la matriz. Algo como esto:
expect(array_example).to match_array( [ { id: 1, link: "www.some-link.com" }, { id: 2, link: "www.example-link.com" } ]Pero este obviamente no funcionará. ¿Hay alguna manera de lograr lo que quiero? Me gustaría evitar el uso de emparejadores personalizados.
Puedes usar emparejadores compuestos:
expect(array_example) .to contain_exactly( a_hash_including(id: 1, link: a_string_including("www.some-link.com")), a_hash_including(id: 2, link: a_string_including("www.example-link.com")) )Consulte https://rspec.info/blog/2014/01/new-in-rspec-3-composable-matchers/ para obtener más información.
El argumento de a_hash_including no tiene que cubrir todo el hash, solo verificará las claves que está pasando.