angular/packages/core/test
Alex Rickabaugh bdd61c768a fix(core): replace assertion with more intentional error (#52234)
Issue #50320 shows that in some cases, updating a signal that's a dependency
of a template during change detection of that template can have several
adverse effects. This can happen, for example, if the signal is set during
the lifecycle hook of a directive within the same template that reads the
signal.

This can cause a few things to happen:

* Straightforwardly, it can cause `ExpressionChanged` errors.
* Surprisingly, it can cause an assertion within the `ReactiveLViewConsumer`
  to fail.
* Very surprisingly, it can cause change detection for an `OnPush` component
  to stop working.

The root cause of these later behaviors is subtle, and is ultimately a
desync between the reactive graph and the view tree's notion of "dirty" for
a given view. This will be fixed with further work planned for change
detection to handle such updates directly. Until then, this commit improves
the DX through two changes:

1. The mechanism of "committing" `ReactiveLViewConsumer`s to a view is
   changed to use the `consumerOnSignalRead` hook from the reactive graph.
   This prevents the situation which required the assertion in the first
   place.

2. A `console.warn` warning is added when a view is marked dirty via a
   signal while it's still executing.

The warning informs users that they're pushing data against the direction of
change detection, risking `ExpressionChanged` or other issues. It's a
warning and not an error because the check is overly broad and captures
situations where the application would not actually break as a result, such
as if a `computed` marked the template dirty but still returned the same
value.

PR Close #52234
2023-10-27 11:41:20 -07:00
..
acceptance fix(core): replace assertion with more intentional error (#52234) 2023-10-27 11:41:20 -07:00
animation refactor(animations): deprecation of AnimationDriver.NOOP (#51843) 2023-09-22 12:15:45 -07:00
bundling fix(core): replace assertion with more intentional error (#52234) 2023-10-27 11:41:20 -07:00
change_detection test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
compiler build: ensure bootstrap transitive runfiles are made available (#48521) 2022-12-19 19:50:41 +00:00
debug test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
di test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
dom test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
hydration refactor(core): adding hydration for content projection (#49454) 2023-03-21 17:42:53 +01:00
i18n test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
linker test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
metadata test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
reflection refactor(core): remove unused logic from reflection capabilities (#45335) 2022-03-24 11:02:39 -07:00
render3 refactor(core): move key calculation in list reconciler (#52227) 2023-10-18 14:04:24 +02:00
sanitization test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
signals fix(core): drop mutate function from the signals public API (#51821) (#51986) 2023-10-06 15:12:00 -07:00
strict_types refactor(core): rename ...WithMeta types to ...Declaration and alias to unknown (#41119) 2021-03-22 08:57:18 -07:00
testability test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
util test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
zone test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
application_config_spec.ts feat(core): add mergeApplicationConfig method (#49253) 2023-03-01 11:20:31 -08:00
application_init_spec.ts refactor(core): throw an error when APP_INITIALIZER token is not an array. (#49860) 2023-04-23 18:31:24 -07:00
application_module_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
application_ref_integration_spec.ts refactor(platform-browser): update renderer to be able to remove ServerRendererFactory2 and EmulatedEncapsulationServerRenderer2 (#49630) 2023-04-05 11:42:57 -07:00
application_ref_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
BUILD.bazel build: bundle tests for karma web test suites (#48521) 2022-12-19 19:50:42 +00:00
component_fixture_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
defer_fixture_spec.ts refactor(core): ignore after and minimum when transition between states in tests (#52314) 2023-10-24 09:25:13 -07:00
dev_mode_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
directive_lifecycle_integration_spec.ts refactor(core): cleanup type any (#48623) 2023-01-04 12:15:16 -08:00
error_handler_spec.ts refactor(core): remove unused error handler logic (#46216) 2022-06-02 13:40:16 -07:00
event_emitter_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
fake_async_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
forward_ref_integration_spec.ts refactor(core): handle #24571 todos. (#49221) 2023-06-14 12:33:44 +02:00
runtime_error_spec.ts refactor(core): improve error message when dom node is not found (#49977) 2023-04-25 09:29:47 -07:00
test_bed_effect_spec.ts refactor(core): decouple effects from change detection (#51049) 2023-09-12 08:12:56 -07:00
test_bed_spec.ts feat(core): implement new block syntax (#51891) 2023-09-26 09:10:04 -07:00
transfer_state_spec.ts refactor(core): simplify state transfer escaping (#50201) 2023-05-10 11:31:34 -07:00
util_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00