Chai - Expect an object to have deep property of an array ignore order
up vote
0
down vote
favorite
I need to check if the payment
has a property named transactions
with expected values:
expect(payment).to.have.deep.property('transactions', [
TRANSACTION_ID_1,
TRANSACTION_ID_2,
]);
As the order of transactions
is not specified, the test doesn't pass all the time.
How can I solve the problem without changing the test structure?
Note: I've found deep-equal-in-any-order
plugin, but it seems it doesn't get any help.
javascript node.js testing chai
add a comment |
up vote
0
down vote
favorite
I need to check if the payment
has a property named transactions
with expected values:
expect(payment).to.have.deep.property('transactions', [
TRANSACTION_ID_1,
TRANSACTION_ID_2,
]);
As the order of transactions
is not specified, the test doesn't pass all the time.
How can I solve the problem without changing the test structure?
Note: I've found deep-equal-in-any-order
plugin, but it seems it doesn't get any help.
javascript node.js testing chai
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I need to check if the payment
has a property named transactions
with expected values:
expect(payment).to.have.deep.property('transactions', [
TRANSACTION_ID_1,
TRANSACTION_ID_2,
]);
As the order of transactions
is not specified, the test doesn't pass all the time.
How can I solve the problem without changing the test structure?
Note: I've found deep-equal-in-any-order
plugin, but it seems it doesn't get any help.
javascript node.js testing chai
I need to check if the payment
has a property named transactions
with expected values:
expect(payment).to.have.deep.property('transactions', [
TRANSACTION_ID_1,
TRANSACTION_ID_2,
]);
As the order of transactions
is not specified, the test doesn't pass all the time.
How can I solve the problem without changing the test structure?
Note: I've found deep-equal-in-any-order
plugin, but it seems it doesn't get any help.
javascript node.js testing chai
javascript node.js testing chai
edited Nov 13 at 7:54
Krupesh Kotecha
2,05011134
2,05011134
asked Nov 13 at 7:10
Mosius
653518
653518
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
Iterate through array and check if it includes each item.
[TRANSACTION_ID_1, TRANSACTION_ID_2].forEach(id => {
expect(payment).to.have.deep.property('transactions').that.includes(id);
});
If you need to check transactions
is unordered array of expected IDs, then check for the length as well.
expect(payment).to.have.deep.property('transactions').that.has.lengthOf(2);
When transactions
has all of the expected ids and has same length of expected ids, then it equals to the expected ids when ordered properly.
I wonder if there is any solution that doesn't require aloop
– Mosius
Nov 13 at 11:11
I doubt if there is. You could sort both of the arrays and assert too.
– emil
Nov 14 at 10:48
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
Iterate through array and check if it includes each item.
[TRANSACTION_ID_1, TRANSACTION_ID_2].forEach(id => {
expect(payment).to.have.deep.property('transactions').that.includes(id);
});
If you need to check transactions
is unordered array of expected IDs, then check for the length as well.
expect(payment).to.have.deep.property('transactions').that.has.lengthOf(2);
When transactions
has all of the expected ids and has same length of expected ids, then it equals to the expected ids when ordered properly.
I wonder if there is any solution that doesn't require aloop
– Mosius
Nov 13 at 11:11
I doubt if there is. You could sort both of the arrays and assert too.
– emil
Nov 14 at 10:48
add a comment |
up vote
0
down vote
Iterate through array and check if it includes each item.
[TRANSACTION_ID_1, TRANSACTION_ID_2].forEach(id => {
expect(payment).to.have.deep.property('transactions').that.includes(id);
});
If you need to check transactions
is unordered array of expected IDs, then check for the length as well.
expect(payment).to.have.deep.property('transactions').that.has.lengthOf(2);
When transactions
has all of the expected ids and has same length of expected ids, then it equals to the expected ids when ordered properly.
I wonder if there is any solution that doesn't require aloop
– Mosius
Nov 13 at 11:11
I doubt if there is. You could sort both of the arrays and assert too.
– emil
Nov 14 at 10:48
add a comment |
up vote
0
down vote
up vote
0
down vote
Iterate through array and check if it includes each item.
[TRANSACTION_ID_1, TRANSACTION_ID_2].forEach(id => {
expect(payment).to.have.deep.property('transactions').that.includes(id);
});
If you need to check transactions
is unordered array of expected IDs, then check for the length as well.
expect(payment).to.have.deep.property('transactions').that.has.lengthOf(2);
When transactions
has all of the expected ids and has same length of expected ids, then it equals to the expected ids when ordered properly.
Iterate through array and check if it includes each item.
[TRANSACTION_ID_1, TRANSACTION_ID_2].forEach(id => {
expect(payment).to.have.deep.property('transactions').that.includes(id);
});
If you need to check transactions
is unordered array of expected IDs, then check for the length as well.
expect(payment).to.have.deep.property('transactions').that.has.lengthOf(2);
When transactions
has all of the expected ids and has same length of expected ids, then it equals to the expected ids when ordered properly.
answered Nov 13 at 10:38
emil
1,87821424
1,87821424
I wonder if there is any solution that doesn't require aloop
– Mosius
Nov 13 at 11:11
I doubt if there is. You could sort both of the arrays and assert too.
– emil
Nov 14 at 10:48
add a comment |
I wonder if there is any solution that doesn't require aloop
– Mosius
Nov 13 at 11:11
I doubt if there is. You could sort both of the arrays and assert too.
– emil
Nov 14 at 10:48
I wonder if there is any solution that doesn't require a
loop
– Mosius
Nov 13 at 11:11
I wonder if there is any solution that doesn't require a
loop
– Mosius
Nov 13 at 11:11
I doubt if there is. You could sort both of the arrays and assert too.
– emil
Nov 14 at 10:48
I doubt if there is. You could sort both of the arrays and assert too.
– emil
Nov 14 at 10:48
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53275649%2fchai-expect-an-object-to-have-deep-property-of-an-array-ignore-order%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown