Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34.2k
test_runner: add getter and setter to MockTracker#45506
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Conversation
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
04a27b4 to 6dca9b9Comparelib/internal/test_runner/mock.js Outdated
| getter: true, | ||
| ...options |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you swap these two lines so that getter cannot be set to a different value. Same comment below for setter.
| functionmockMethod(){ | ||
| returnthis.prop-1; | ||
| } | ||
| constgetter=t.mock.getter(obj,'method',mockMethod); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add tests that try to set getter and setter to false. Tests that throw when trying to set setter: true when calling getter() and vice versa would be nice to.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@cjihrig Thank you for your suggestions.
If getter cannot be set to a different value, I think that validation do not work for options in method().
Do we implement validation for options in getter() and setter() ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If getter cannot be set to a different value, I think that validation do not work for options in method().
There is validation, but if you set the getter option to false, it would pass validation, but the getter() method would not make sense.
Do we implement validation for options in getter() and setter() ?
I would be OK with validating the getter or setter option to ensure that they are not set to any value besides true and deferring all other validation to method().
doc/api/test.md Outdated
| added: REPLACEME | ||
| --> | ||
| This function is syntax sugar for [`MockTracker.method`][] with `options.getter` is `true`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| This function is syntax sugar for [`MockTracker.method`][] with `options.getter`is`true`. | |
| This function is syntax sugar for [`MockTracker.method`][] with `options.getter`set to`true`. |
doc/api/test.md Outdated
| added: REPLACEME | ||
| --> | ||
| This function is syntax sugar for [`MockTracker.method`][] with `options.setter` is `true`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| This function is syntax sugar for [`MockTracker.method`][] with `options.setter`is`true`. | |
| This function is syntax sugar for [`MockTracker.method`][] with `options.setter`set to`true`. |
f16927b to e240af4Comparedoc/api/test.md Outdated
| This function is syntax sugar for [`MockTracker.method`][] with `options.getter` | ||
| set to `true`. | ||
| ### `mock.setter(object, methodName[, implementation][, options])` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, I just realized that this is not sorted. mock.setter() should come after mock.reset().
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I will sort them in alphabetical order.
lib/internal/test_runner/mock.js Outdated
| if(!getter){ | ||
| thrownewERR_INVALID_ARG_VALUE( | ||
| 'options.getter',getter,"cannot set to 'false'" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same comment for setter:
| 'options.getter',getter,"cannot set to 'false'" | |
| 'options.getter',getter,"cannot be false" |
lib/internal/test_runner/mock.js Outdated
| const{ getter =true}=options; | ||
| validateBoolean(getter,'options.getter'); | ||
| if(!getter){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can simplify this and let method() handle the validation (same for setter).
| const{ getter =true}=options; | |
| validateBoolean(getter,'options.getter'); | |
| if(!getter){ | |
| if(options?.getter===false){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't understand the reason/logic behind allowing only getter === true while setting it to true as default, but if it's false throw an error? Why do we even check for options?.getter at all?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is incorrect to specify options.getter for getter(). If we don't check it, getter() will not throw an error even if we specify false for options.getter. I think that it is better to check options.getter, since getter() will not throw an error if options.getter is specified as false.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
lib/internal/test_runner/mock.js Outdated
| validateBoolean(setter,'options.setter'); | ||
| if(!setter){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| if(!setter){ | |
| if(setter===false){ |
lib/internal/test_runner/mock.js Outdated
| const{ getter =true}=options; | ||
| validateBoolean(getter,'options.getter'); | ||
| if(!getter){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't understand the reason/logic behind allowing only getter === true while setting it to true as default, but if it's false throw an error? Why do we even check for options?.getter at all?
cde2736 to 8e13ae4Compare
MoLow left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
doc/api/test.md Outdated
| }); | ||
| ``` | ||
| they are sorted in alphabetical order. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please remove this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| they are sorted in alphabetical order. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry. I remove this.
lib/internal/test_runner/mock.js Outdated
| if(getter===false){ | ||
| thrownewERR_INVALID_ARG_VALUE( | ||
| 'options.getter',getter,"cannot be 'false'" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| 'options.getter',getter,"cannot be 'false'" | |
| 'options.getter',getter,"cannot be false" |
lib/internal/test_runner/mock.js Outdated
| if(setter===false){ | ||
| thrownewERR_INVALID_ARG_VALUE( | ||
| 'options.setter',setter,"cannot be 'false'" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| 'options.setter',setter,"cannot be 'false'" | |
| 'options.setter',setter,"cannot be false" |
lib/internal/test_runner/mock.js Outdated
| returnthis.method(object,methodName,implementation,{ | ||
| ...options, | ||
| getter: true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| getter: true | |
| getter, |
lib/internal/test_runner/mock.js Outdated
| } | ||
| validateObject(options,'options'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can skip the validation if we know it's an object already.
| } | |
| validateObject(options,'options'); | |
| }else{ | |
| validateObject(options,'options'); | |
| } |
lib/internal/test_runner/mock.js Outdated
| } | ||
| validateObject(options,'options'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| } | |
| validateObject(options,'options'); | |
| }else{ | |
| validateObject(options,'options'); | |
| } |
lib/internal/test_runner/mock.js Outdated
| returnthis.method(object,methodName,implementation,{ | ||
| ...options, | ||
| setter: true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| setter: true | |
| setter, |
doc/api/test.md Outdated
| }); | ||
| ``` | ||
| they are sorted in alphabetical order. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| they are sorted in alphabetical order. |
lib/internal/test_runner/mock.js Outdated
| validateBoolean(getter,'options.getter'); | ||
aduh95Nov 20, 2022 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The validation is already done in this.method (if you implement my suggestion in #45506 (comment)), I suggest removing it.
| validateBoolean(getter, 'options.getter'); |
lib/internal/test_runner/mock.js Outdated
| validateBoolean(setter,'options.setter'); | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here.
| validateBoolean(setter, 'options.setter'); |
bae6aa6 to dd8d5d3Comparelib/internal/test_runner/mock.js Outdated
| returnthis.method(object,methodName,implementation,{ | ||
| ...options, | ||
| getter |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| getter | |
| getter, |
lib/internal/test_runner/mock.js Outdated
| returnthis.method(object,methodName,implementation,{ | ||
| ...options, | ||
| setter |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| setter | |
| setter, |
This commit allows tests in test runner to use the `getter` and `setter` methods as "syntax sugar" for `MockTracker.method` with the `options.getter` or `options.setter` set to true in the options. Refs: nodejs#45326 (comment)
dd8d5d3 to 6da996aComparenodejs-github-bot commented Nov 21, 2022
ljharb commented Nov 22, 2022
cc @nodejs/testing |
aduh95 left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ideally we would have tests to ensure that passing non-boolean values to getter or setter would trigger an error. Otherwise LGTM.
nodejs-github-bot commented Nov 23, 2022
nodejs-github-bot commented Nov 27, 2022
Landed in 147d810...afed1af |
This commit allows tests in test runner to use the `getter` and `setter` methods as "syntax sugar" for `MockTracker.method` with the `options.getter` or `options.setter` set to true in the options. Refs: #45326 (comment) PR-URL: #45506 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
This commit allows tests in test runner to use the `getter` and `setter` methods as "syntax sugar" for `MockTracker.method` with the `options.getter` or `options.setter` set to true in the options. Refs: nodejs#45326 (comment) PR-URL: nodejs#45506 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
This commit allows tests in test runner to use the `getter` and `setter` methods as "syntax sugar" for `MockTracker.method` with the `options.getter` or `options.setter` set to true in the options. Refs: #45326 (comment) PR-URL: #45506 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
targos commented Dec 14, 2022
Apparently the documentation for this landed in v16.x (maintenance LTS). I don't see any other references above so maybe the feature itself wasn't backported. /cc @richardlau |
richardlau commented Dec 14, 2022
I'm confused. I don't see any references to |
richardlau commented Dec 14, 2022
Mocking itself is one of the commits in the open backport #45602 but that hasn't landed on v16.x-staging yet. |
targos commented Dec 14, 2022
I'll dig in tomorrow, but while releasing v19.3.0, I had to update the added yaml field, which had an initial value for v16 |
targos commented Dec 14, 2022
At least that's the case on the main branch |
richardlau commented Dec 14, 2022
Ah it's possible the release commit merged incorrectly. |
When cherry-picking the release commit for Node.js 16.19.0 to the `main` branch git updated the metadata for the wrong item in `doc/api/test.md`. The incorrectly updated item has been fixed in a subsequent commit (the merge for the 19.3.0 release commit). This commit updates the intended item that should have been updated when the 16.19.0 release commit was merged. Refs: nodejs#45506 (comment) Refs: nodejs/Release#771
richardlau commented Dec 14, 2022
Yes, it was indeed. Another example of nodejs/Release#771 😞. Thanks for catching it. Opened #45863 to correct. |
When cherry-picking the release commit for Node.js 16.19.0 to the `main` branch git updated the metadata for the wrong item in `doc/api/test.md`. Refs: nodejs#45506 (comment) Refs: nodejs/Release#771
When cherry-picking the release commit for Node.js 16.19.0 to the `main` branch git updated the metadata for the wrong item in `doc/api/test.md`. Refs: #45506 (comment) Refs: nodejs/Release#771 PR-URL: #45863 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Tierney Cyren <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: Luigi Pinca <[email protected]>
This commit allows tests in test runner to use the `getter` and `setter` methods as "syntax sugar" for `MockTracker.method` with the `options.getter` or `options.setter` set to true in the options. Refs: #45326 (comment) PR-URL: #45506 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
This commit allows tests in test runner to use the `getter` and `setter` methods as "syntax sugar" for `MockTracker.method` with the `options.getter` or `options.setter` set to true in the options. Refs: #45326 (comment) PR-URL: #45506 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
This commit allows tests in test runner to use the `getter` and `setter` methods as "syntax sugar" for `MockTracker.method` with the `options.getter` or `options.setter` set to true in the options. Refs: #45326 (comment) PR-URL: #45506 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
This commit allows tests in test runner to use the `getter` and `setter` methods as "syntax sugar" for `MockTracker.method` with the `options.getter` or `options.setter` set to true in the options. Refs: #45326 (comment) PR-URL: #45506 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
This commit allows tests in test runner to use the `getter` and `setter` methods as "syntax sugar" for `MockTracker.method` with the `options.getter` or `options.setter` set to true in the options. Refs: #45326 (comment) PR-URL: #45506 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
This commit allows tests in test runner to use the `getter` and `setter` methods as "syntax sugar" for `MockTracker.method` with the `options.getter` or `options.setter` set to true in the options. Refs: nodejs/node#45326 (comment) PR-URL: nodejs/node#45506 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]> (cherry picked from commit afed1afa55962211b6b56c2068d520b4d8a08888)
This commit allows tests in test runner to use the
getterandsettermethods as "syntax sugar" forMockTracker.methodwith theoptions.getteroroptions.setterset to true in the options.Refs: #45326 (comment)