[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:frontend\u002Fangular-testing-performance":4,"config":235},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":133,"samples":150},"frontend","Frontend","","angular-testing-performance","Angular Testing Performance","en",75,2925,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130],{"key":19,"name":20,"count":11},"accessibility","Accessibility",{"key":22,"name":23,"count":11},"angular-change-detection","Angular Change Detection",{"key":25,"name":26,"count":11},"angular-components-lifecycle","Angular Components Lifecycle",{"key":28,"name":29,"count":11},"angular-dependency-injection","Angular Dependency Injection",{"key":31,"name":32,"count":11},"angular-directives-pipes","Angular Directives Pipes",{"key":34,"name":35,"count":11},"angular-router-forms","Angular Router Forms",{"key":8,"name":9,"count":11},{"key":38,"name":39,"count":11},"css-layout","Css Layout",{"key":41,"name":42,"count":11},"dom-browser-apis","Dom Browser Apis",{"key":44,"name":45,"count":11},"javascript-async-concurrency","Javascript Async Concurrency",{"key":47,"name":48,"count":11},"javascript-language","Javascript Language",{"key":50,"name":51,"count":11},"javascript-memory-performance","Javascript Memory Performance",{"key":53,"name":54,"count":11},"javascript-modules-bundling","Javascript Modules Bundling",{"key":56,"name":57,"count":11},"javascript-prototypes-oop","Javascript Prototypes Oop",{"key":59,"name":60,"count":11},"javascript-runtime-apis","Javascript Runtime Apis",{"key":62,"name":63,"count":11},"javascript-testing-tooling","Javascript Testing Tooling",{"key":65,"name":66,"count":11},"performance","Performance",{"key":68,"name":69,"count":11},"react-components-jsx","React Components Jsx",{"key":71,"name":72,"count":11},"react-context-state","React Context State",{"key":74,"name":75,"count":11},"react-effects-lifecycle","React Effects Lifecycle",{"key":77,"name":78,"count":11},"react-forms-suspense","React Forms Suspense",{"key":80,"name":81,"count":11},"react-hooks-state","React Hooks State",{"key":83,"name":84,"count":11},"react-rendering-performance","React Rendering Performance",{"key":86,"name":87,"count":11},"rendering-reactivity","Rendering Reactivity",{"key":89,"name":90,"count":11},"state-management","State Management",{"key":92,"name":93,"count":11},"testing","Testing",{"key":95,"name":96,"count":11},"typescript-advanced-types","Typescript Advanced Types",{"key":98,"name":99,"count":11},"typescript-generics","Typescript Generics",{"key":101,"name":102,"count":11},"typescript-modules-declarations","Typescript Modules Declarations",{"key":104,"name":105,"count":11},"typescript-narrowing-control-flow","Typescript Narrowing Control Flow",{"key":107,"name":108,"count":11},"typescript-tooling-config","Typescript Tooling Config",{"key":110,"name":111,"count":11},"typescript-type-fundamentals","Typescript Type Fundamentals",{"key":113,"name":114,"count":11},"vue-components-props","Vue Components Props",{"key":116,"name":117,"count":11},"vue-composition-api","Vue Composition Api",{"key":119,"name":120,"count":11},"vue-directives-templates","Vue Directives Templates",{"key":122,"name":123,"count":11},"vue-performance-testing","Vue Performance Testing",{"key":125,"name":126,"count":11},"vue-reactivity-system","Vue Reactivity System",{"key":128,"name":129,"count":11},"vue-router-state-management","Vue Router State Management",{"key":131,"name":132,"count":11},"web-security","Web Security",[134,138,141,144,147],{"key":135,"name":136,"count":137},"angular","Angular",450,{"key":139,"name":140,"count":137},"javascript","JavaScript",{"key":142,"name":143,"count":137},"react","React",{"key":145,"name":146,"count":137},"typescript","TypeScript",{"key":148,"name":149,"count":137},"vue","Vue",[151,169,182,196,209,222],{"id":152,"topic":9,"difficulty":153,"body":154,"options":155,"correct_key":160,"explanation":168},"019f79bd-9089-7f0d-81e8-ea79de3cfba2",1,"In an Angular unit test, what is the main purpose of `TestBed.configureTestingModule({...})`?",[156,159,162,165],{"key":157,"text":158},"a","To start the production build process for the application",{"key":160,"text":161},"b","To set up an Angular testing module with the declarations\u002Fimports\u002Fproviders a test needs",{"key":163,"text":164},"c","To open a real browser window and run end-to-end tests",{"key":166,"text":167},"d","To bundle the application, minify its output, and measure the final production bundle size after building","`TestBed.configureTestingModule()` creates a dedicated Angular module scoped to the test, letting you declare the component under test and supply the imports\u002Fproviders it depends on. It's the standard entry point for Angular unit tests written with Jasmine\u002FKarma.",{"id":170,"topic":9,"difficulty":153,"body":171,"options":172,"correct_key":163,"explanation":181},"019f79bd-908a-7ce4-b111-23d6d1441664","```typescript\nlet fixture: ComponentFixture\u003CCounterComponent>;\n\nbeforeEach(() => {\n  TestBed.configureTestingModule({ declarations: [CounterComponent] });\n  fixture = TestBed.createComponent(CounterComponent);\n});\n```\nAfter `fixture.detectChanges()` is called for the first time, what happens?",[173,175,177,179],{"key":157,"text":174},"The component is destroyed and `ngOnDestroy` runs",{"key":160,"text":176},"Nothing, `detectChanges()` only works after `ngOnInit` has already fired",{"key":163,"text":178},"Angular runs change detection, which also triggers `ngOnInit` on first call",{"key":166,"text":180},"The component's template is compiled for the very first time","In tests, Angular does not run change detection automatically. Calling `fixture.detectChanges()` triggers the component's lifecycle (including the initial `ngOnInit`) and updates the rendered DOM to match the current component state.",{"id":183,"topic":9,"difficulty":184,"body":185,"options":186,"correct_key":157,"explanation":195},"019f79bd-908b-7aac-8eec-f0b427ab851c",2,"In a classic Karma-based Angular unit-test setup, which tools play the framework and browser-runner roles?",[187,189,191,193],{"key":157,"text":188},"Jasmine as the test framework, Karma as the test runner",{"key":160,"text":190},"Mocha as the test framework, Cypress as the test runner",{"key":163,"text":192},"Jest as the test framework, Playwright as the test runner",{"key":166,"text":194},"JUnit as the test framework, Selenium as the test runner","In this setup, Jasmine supplies the `describe`\u002F`it`\u002F`expect` test API and Karma launches browsers and runs the specs. Angular CLI defaults have changed across versions, so the pairing should be identified by the configured runner rather than assumed to be every new project's current default.",{"id":197,"topic":9,"difficulty":153,"body":198,"options":199,"correct_key":166,"explanation":208},"019f79bd-908d-770c-84f3-7e595b7cb3f3","```typescript\nclass MathService {\n  square(n: number): number {\n    return n * n;\n  }\n}\n\ndescribe('MathService', () => {\n  it('squares a number', () => {\n    const service = new MathService();\n    expect(service.square(4)).toBe(16);\n  });\n});\n```\nWhy can this service test skip `TestBed` entirely?",[200,202,204,206],{"key":157,"text":201},"Jasmine tests never need `TestBed`, regardless of the class under test",{"key":160,"text":203},"`MathService` uses `@Injectable`, so Angular provides it automatically",{"key":163,"text":205},"`TestBed` only works for components, never for services",{"key":166,"text":207},"`MathService` has no dependencies, so it can be instantiated directly with `new`","`TestBed` matters when Angular's dependency injection needs to resolve constructor dependencies or when a component needs a rendering environment. A plain class with no injected dependencies can simply be instantiated with `new`, keeping the test fast and simple.",{"id":210,"topic":9,"difficulty":184,"body":211,"options":212,"correct_key":160,"explanation":221},"019f79bd-908e-7ab1-97c3-8139315fc6be","```typescript\nit('renders the title', () => {\n  fixture.detectChanges();\n  const el: HTMLElement = fixture.nativeElement;\n  expect(el.querySelector('h1')?.textContent).toContain('Dashboard');\n});\n```\nWhat does `fixture.nativeElement` give access to?",[213,215,217,219],{"key":157,"text":214},"The TypeScript class instance of the component",{"key":160,"text":216},"The root DOM element rendered by the component",{"key":163,"text":218},"The Angular module the component was declared in",{"key":166,"text":220},"A mock version of the DOM that never actually renders","`fixture.nativeElement` exposes the actual rendered DOM node for the component's host element, so tests can query it with standard DOM APIs like `querySelector` to assert on rendered content. The component instance itself is available separately via `fixture.componentInstance`.",{"id":223,"topic":9,"difficulty":184,"body":224,"options":225,"correct_key":157,"explanation":234},"019f79bd-908f-7177-aeb6-d7fc0386446a","What is `fakeAsync` primarily used for in Angular tests?",[226,228,230,232],{"key":157,"text":227},"To run asynchronous code (timers, promises) in a synchronous-looking test zone that can be controlled with `tick()`",{"key":160,"text":229},"To automatically mock every HTTP call made during the test",{"key":163,"text":231},"It automatically retries every HTTP call made anywhere during the test, regardless of endpoint or status code",{"key":166,"text":233},"To make a real network request faster by caching the response","`fakeAsync` wraps a test function in a special zone where asynchronous operations like `setTimeout` and promise resolution can be simulated and advanced deterministically using `tick()`, instead of relying on real elapsed time.",{"fields":236,"seniorities":410,"interview_shapes":411,"locales":416,"oauth":418,"question_count":421,"coach_enabled":422,"jd_match_enabled":422},[237,262,270,287,311,324,343,362,384,391,397,404],{"key":238,"name_tr":239,"name_en":239,"sort":153,"specializations":240},"backend","Backend",[241,244,247,250,253,256,259],{"key":242,"name":243,"field":238},"general","Genel",{"key":245,"name":246,"field":238},"go","Go",{"key":248,"name":249,"field":238},"python","Python",{"key":251,"name":252,"field":238},"java","Java",{"key":254,"name":255,"field":238},"csharp","C#\u002F.NET",{"key":257,"name":258,"field":238},"nodejs","Node.js",{"key":260,"name":261,"field":238},"php","PHP",{"key":5,"name_tr":6,"name_en":6,"sort":184,"specializations":263},[264,265,266,267,268,269],{"key":242,"name":243,"field":5},{"key":139,"name":140,"field":5},{"key":145,"name":146,"field":5},{"key":142,"name":143,"field":5},{"key":148,"name":149,"field":5},{"key":135,"name":136,"field":5},{"key":271,"name_tr":272,"name_en":272,"sort":273,"specializations":274},"fullstack","Fullstack",3,[275,276,277,278,279,280,281,282,283,284,285,286],{"key":242,"name":243,"field":271},{"key":245,"name":246,"field":238},{"key":248,"name":249,"field":238},{"key":251,"name":252,"field":238},{"key":254,"name":255,"field":238},{"key":257,"name":258,"field":238},{"key":260,"name":261,"field":238},{"key":139,"name":140,"field":5},{"key":145,"name":146,"field":5},{"key":142,"name":143,"field":5},{"key":148,"name":149,"field":5},{"key":135,"name":136,"field":5},{"key":288,"name_tr":289,"name_en":289,"sort":290,"specializations":291},"devops-cloud","DevOps \u002F Cloud",4,[292,293,296,299,302,305,308],{"key":242,"name":243,"field":288},{"key":294,"name":295,"field":288},"aws","AWS",{"key":297,"name":298,"field":288},"gcp","GCP",{"key":300,"name":301,"field":288},"azure","Azure",{"key":303,"name":304,"field":288},"kubernetes","Kubernetes",{"key":306,"name":307,"field":288},"terraform","Terraform",{"key":309,"name":310,"field":288},"linux","Linux",{"key":312,"name_tr":313,"name_en":313,"sort":314,"specializations":315},"ai-engineer","AI Engineer",5,[316,317,318,321],{"key":242,"name":243,"field":312},{"key":248,"name":249,"field":312},{"key":319,"name":320,"field":312},"llm-rag","LLM\u002FRAG",{"key":322,"name":323,"field":312},"mlops","MLOps",{"key":325,"name_tr":326,"name_en":327,"sort":328,"specializations":329},"database","Veritabanı","Database",6,[330,331,334,337,340],{"key":242,"name":243,"field":325},{"key":332,"name":333,"field":325},"postgresql","PostgreSQL",{"key":335,"name":336,"field":325},"mysql","MySQL",{"key":338,"name":339,"field":325},"mongodb","MongoDB",{"key":341,"name":342,"field":325},"redis","Redis",{"key":344,"name_tr":345,"name_en":346,"sort":347,"specializations":348},"mobile","Mobil","Mobile",7,[349,350,353,356,359],{"key":242,"name":243,"field":344},{"key":351,"name":352,"field":344},"ios-swift","iOS (Swift)",{"key":354,"name":355,"field":344},"android-kotlin","Android (Kotlin)",{"key":357,"name":358,"field":344},"flutter","Flutter",{"key":360,"name":361,"field":344},"react-native","React Native",{"key":363,"name_tr":364,"name_en":365,"sort":366,"specializations":367},"security","Güvenlik","Security",8,[368,369,372,375,378,381],{"key":242,"name":243,"field":363},{"key":370,"name":371,"field":363},"appsec","AppSec",{"key":373,"name":374,"field":363},"offensive-pentest","Offensive \u002F Pentest",{"key":376,"name":377,"field":363},"cloud-security","Cloud Security",{"key":379,"name":380,"field":363},"devsecops","DevSecOps",{"key":382,"name":383,"field":363},"blue-team-incident","Blue Team \u002F Incident",{"key":385,"name_tr":386,"name_en":387,"sort":388,"specializations":389},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[390],{"key":242,"name":243,"field":385},{"key":392,"name_tr":393,"name_en":393,"sort":394,"specializations":395},"data-engineer","Data Engineer",10,[396],{"key":242,"name":243,"field":392},{"key":398,"name_tr":399,"name_en":400,"sort":401,"specializations":402},"game-dev","Oyun Geliştirme","Game Development",11,[403],{"key":242,"name":243,"field":398},{"key":405,"name_tr":406,"name_en":406,"sort":407,"specializations":408},"ml-engineer","ML Engineer",12,[409],{"key":242,"name":243,"field":405},[14,15,16],{"junior":412,"mid":414,"senior":415},{"questions":413,"median_sec":3},20,{"questions":413,"median_sec":3},{"questions":413,"median_sec":3},[417,10],"tr",[419,420],"google","github",21750,true]