Re:How JavaScript Works: deep dive into call, apply, and bind
by moron4hire on Friday July 09, 2021 @08:21PM
(#27789933)
You don't write tests for private methods.
[ Parent
| on HN ]
Re:How JavaScript Works: deep dive into call, apply, and bind
by dotancohen on Saturday July 10, 2021 @02:20AM
(#27791521)
Of course private methods should be tested. These are unit tests, not functional/integration tests.
Re:How JavaScript Works: deep dive into call, apply, and bind
by shawnz on Saturday July 10, 2021 @07:21AM
(#27792631)
You don't unit test private methods, the "unit" is the exposed surface of the class.
Re:How JavaScript Works: deep dive into call, apply, and bind
by exdsq on Friday July 09, 2021 @11:59PM
(#27791000)
Why not?
Re:How JavaScript Works: deep dive into call, apply, and bind
by bmy78 on Saturday July 10, 2021 @07:45AM
(#27792718)
Because it’s assumed those private methods’ usage happens within public methods, which should be tested. By testing the public methods and all of its use cases you are also testing private ones. That way you can arbitrarily modify private methods without touching the tests (presuming you’re refactoring and don’t need to modify behavior).
Re:How JavaScript Works: deep dive into call, apply, and bind
by exdsq on Saturday July 10, 2021 @12:13PM
(#27794384)
This seems to be building on rocky foundations though. It's unlikely a functions entire test vector gets checked during testing. This is a known risk (you can't test everything) but by leaving all the functions under a public function untested there is no safety net.
Re:How JavaScript Works: deep dive into call, apply, and bind
by moron4hire on Saturday July 10, 2021 @12:46PM
(#27794677)
If the code of the private methods cannot be fully exercised through the class' public interface, then that code never executes and should not even be in the function.
Re:How JavaScript Works: deep dive into call, apply, and bind
by shawnz on Saturday July 10, 2021 @07:26AM
(#27792646)
The most obvious reason is that they're private and not normally reachable from your test code.
But even conceptually there are problems with testing private methods. For example they likely expect to be called only while the class is in some specific state or in the middle of some atomic operation. Otherwise they could have just been made public.