Ce chèque avait l'habitude de passer:
expect(array).toContain(value)
Tableau:
[
{"_t":"user","id":1073970419,"email":"[email protected]","name":"Spectator"},
{"_t":"user","id":4464992042,"email":"[email protected]","name":"Collaborator"},
{"_t":"user","id":1978569710,"email":"[email protected]","name":"Manage"}
]
Valeur:
{"_t":"user","id":1978569710,"email":"[email protected]","name":"Manage"}
Mais ne passe plus. Quelle est la nouvelle façon d'écrire le même test?
Il ne contiendra pas cet objet (rappelez-vous, deux objets avec les mêmes propriétés ne sont pas le même objet aux fins de l'égalité), donc toContain
ne passera jamais.
Vous devez utiliser un autre test, tel que toEqual
ou (si vous souhaitez uniquement rechercher un sous-ensemble de propriétés), toEqual
combiné avec jasmine.objectContaining
.
Voici l'exemple toEqual
de la documentation Jasmine sur cette page:
describe("The 'toEqual' matcher", function() {
it("works for simple literals and variables", function() {
var a = 12;
expect(a).toEqual(12);
});
it("should work for objects", function() {
var foo = {
a: 12,
b: 34
};
var bar = {
a: 12,
b: 34
};
expect(foo).toEqual(bar);
});
});
Notez maintenant foo
est égal à bar
.
Voici leur exemple en utilisant jasmine.objectContaining
:
describe("jasmine.objectContaining", function() {
var foo;
beforeEach(function() {
foo = {
a: 1,
b: 2,
bar: "baz"
};
});
it("matches objects with the expect key/value pairs", function() {
expect(foo).toEqual(jasmine.objectContaining({
bar: "baz"
}));
expect(foo).not.toEqual(jasmine.objectContaining({
c: 37
}));
});
// ...
});
Notez que l'objet avec plusieurs propriétés correspond à l'objet partiel fourni à jasmine.objectContaining
.
La syntaxe dont vous avez besoin est la suivante:
const obj = {"_t":"user","id":1978569710,"email":"[email protected]","name":"Manage"};
expect(array).toContain(jasmine.objectContaining(obj));
Voir le violon: https://jsfiddle.net/bblackwo/4o5u5Lmo/16/
@ T.J.Crowder expliquait déjà précisément le problème. Juste pour vous aider un peu plus, si vous voulez adapter votre exemple, vous aurez besoin de quelque chose comme ça:
var userA = {"_t":"user","id":1978569710,"email":"[email protected]","name":"Manage"}
array =
[
{"_t":"user","id":1073970419,"email":"[email protected]","name":"Spectator"},
{"_t":"user","id":4464992042,"email":"[email protected]","name":"Collaborator"},
userA
]
expect(array).toContain(userA);