As with regular Angular components, Angular elements are expected to
have their views update when inputs change.
Previously, Angular Elements views were not updated if the underlying
component used the `OnPush` change detection strategy.
This commit fixes this by calling `markForCheck()` on the component
view's `ChangeDetectorRef`.
NOTE:
This is similar to how `@angular/upgrade` does it:
3236ae0ee1/packages/upgrade/src/common/src/downgrade_component_adapter.ts (L146).
Fixes #38948
PR Close #39452
		
	
			
		
			
				
	
	
		
			59 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {browser, by, element, ElementFinder, ExpectedConditions as EC} from 'protractor';
 | |
| 
 | |
| browser.waitForAngularEnabled(false);
 | |
| describe('Element E2E Tests', function () {
 | |
|   describe('Hello World Elements', () => {
 | |
|     beforeEach(() => browser.get('hello-world.html'));
 | |
| 
 | |
|     describe('(with default CD strategy and view encapsulation)', () => {
 | |
|       const helloWorldEl = element(by.css('hello-world-el'));
 | |
| 
 | |
|       it('should display "Hello World!"', function () {
 | |
|         expect(helloWorldEl.getText()).toBe('Hello World!');
 | |
|       });
 | |
| 
 | |
|       it('should display "Hello Foo!" via name attribute', function () {
 | |
|         const input = element(by.css('input[type=text]'));
 | |
|         input.sendKeys('Foo');
 | |
| 
 | |
|         // Make tests less flaky on CI by waiting up to 5s for the element text to be updated.
 | |
|         browser.wait(EC.textToBePresentInElement(helloWorldEl, 'Hello Foo!'), 5000);
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     describe('(with `OnPush` CD strategy)', () => {
 | |
|       const helloWorldOnpushEl = element(by.css('hello-world-onpush-el'));
 | |
| 
 | |
|       it('should display "Hello World!"', function () {
 | |
|         expect(helloWorldOnpushEl.getText()).toBe('Hello World!');
 | |
|       });
 | |
| 
 | |
|       it('should display "Hello Foo!" via name attribute', function () {
 | |
|         const input = element(by.css('input[type=text]'));
 | |
|         input.sendKeys('Foo');
 | |
| 
 | |
|         // Make tests less flaky on CI by waiting up to 5s for the element text to be updated.
 | |
|         browser.wait(EC.textToBePresentInElement(helloWorldOnpushEl, 'Hello Foo!'), 5000);
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     describe('(with `ShadowDom` view encapsulation)', () => {
 | |
|       const helloWorldShadowEl = element(by.css('hello-world-shadow-el'));
 | |
|       const getShadowDomText = (el: ElementFinder) =>
 | |
|         browser.executeScript('return arguments[0].shadowRoot.textContent', el);
 | |
| 
 | |
|       it('should display "Hello World!"', function () {
 | |
|         expect(getShadowDomText(helloWorldShadowEl)).toBe('Hello World!');
 | |
|       });
 | |
| 
 | |
|       it('should display "Hello Foo!" via name attribute', function () {
 | |
|         const input = element(by.css('input[type=text]'));
 | |
|         input.sendKeys('Foo');
 | |
| 
 | |
|         // Make tests less flaky on CI by waiting up to 5s for the element text to be updated.
 | |
|         browser.wait(async () => await getShadowDomText(helloWorldShadowEl) === 'Hello Foo!', 5000);
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| });
 |