[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:frontend\u002Fjavascript-testing-tooling":4,"config":234},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","","javascript-testing-tooling","Javascript Testing Tooling","en",75,2925,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,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":37,"name":38,"count":11},"angular-testing-performance","Angular Testing Performance",{"key":40,"name":41,"count":11},"css-layout","Css Layout",{"key":43,"name":44,"count":11},"dom-browser-apis","Dom Browser Apis",{"key":46,"name":47,"count":11},"javascript-async-concurrency","Javascript Async Concurrency",{"key":49,"name":50,"count":11},"javascript-language","Javascript Language",{"key":52,"name":53,"count":11},"javascript-memory-performance","Javascript Memory Performance",{"key":55,"name":56,"count":11},"javascript-modules-bundling","Javascript Modules Bundling",{"key":58,"name":59,"count":11},"javascript-prototypes-oop","Javascript Prototypes Oop",{"key":61,"name":62,"count":11},"javascript-runtime-apis","Javascript Runtime Apis",{"key":8,"name":9,"count":11},{"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,195,208,221],{"id":152,"topic":9,"difficulty":153,"body":154,"options":155,"correct_key":163,"explanation":168},"019f7517-0fbd-7d6e-9123-8a6f113c81aa",1,"In Jest\u002FVitest, what is the basic purpose of `describe()` versus `it()`\u002F`test()`?",[156,159,162,165],{"key":157,"text":158},"a","They are interchangeable aliases for the same function",{"key":160,"text":161},"b","`describe()` runs tests in parallel; `it()`\u002F`test()` runs them sequentially",{"key":163,"text":164},"c","`describe()` groups tests; `it()`\u002F`test()` defines one test case",{"key":166,"text":167},"d","`describe()` defines an individual test case; `it()`\u002F`test()` groups them","`describe()` is a grouping block used to organize related tests (and share setup via hooks), while `it()`\u002F`test()` defines one actual test case with an assertion. They are not aliases (a), neither controls execution parallelism on its own (b), and (d) reverses the actual roles — grouping belongs to `describe()`, individual cases to `it()`\u002F`test()`.",{"id":170,"topic":9,"difficulty":153,"body":171,"options":172,"correct_key":157,"explanation":181},"019f7517-0fbe-7d5a-bffd-d731dc62b2ff","What is the difference between `expect(x).toBe(y)` and `expect(x).toEqual(y)`?",[173,175,177,179],{"key":157,"text":174},"`toBe` uses `Object.is` (reference equality); `toEqual` compares values deeply",{"key":160,"text":176},"There is no difference; both always compare deeply",{"key":163,"text":178},"`toBe` is for numbers only; `toEqual` is for strings only",{"key":166,"text":180},"`toEqual` checks reference equality; `toBe` checks deep value equality","`toBe` compares with `Object.is` — identical primitives or the exact same object reference. `toEqual` walks the structure recursively and compares values, so two different objects with the same shape are equal under `toEqual` but not `toBe`.",{"id":183,"topic":9,"difficulty":153,"body":184,"options":185,"correct_key":166,"explanation":194},"019f7517-0fbf-7c99-b8c0-d327f84be605","What does a `beforeEach(fn)` inside a `describe` block do?",[186,188,190,192],{"key":157,"text":187},"Runs `fn` once before all tests in that block start",{"key":160,"text":189},"Skips the next test if `fn` throws",{"key":163,"text":191},"Runs `fn` only before the first test in that block",{"key":166,"text":193},"Runs `fn` before every test, each time freshly","`beforeEach` re-runs its callback before every single test in the enclosing block, which is exactly what makes it useful for resetting fresh state between tests. Running once for the whole block is `beforeAll`'s job, not `beforeEach`'s (a, c).",{"id":196,"topic":9,"difficulty":153,"body":197,"options":198,"correct_key":160,"explanation":207},"019f7517-0fc0-7452-9fa0-86683c2dfd05","In a test file with `test.only('a', ...)`, `test('b', ...)`, and `test('c', ...)`, which tests actually run?",[199,201,203,205],{"key":157,"text":200},"All three tests run",{"key":160,"text":202},"Only test 'a' runs; 'b' and 'c' are skipped",{"key":163,"text":204},"Only 'b' and 'c' run; 'a' is skipped",{"key":166,"text":206},"`test.only` throws an error unless every test in the file uses it","`.only` restricts the run to just the marked test(s) in that file, skipping every other test — useful for focusing on one case while debugging. It doesn't require universal use (d) or invert which test is selected (c).",{"id":209,"topic":9,"difficulty":153,"body":210,"options":211,"correct_key":163,"explanation":220},"019f7517-0fc0-7a69-aa12-3293996a5788","In `package.json`, a dependency listed as `\"^1.2.3\"` allows npm to install which range of versions?",[212,214,216,218],{"key":157,"text":213},"Only exactly version 1.2.3",{"key":160,"text":215},"Any version, including 2.x.x and above",{"key":163,"text":217},"Any 1.x.x version that is >= 1.2.3 and \u003C 2.0.0",{"key":166,"text":219},"Any version >= 1.2.3 and \u003C 1.3.0 only","The caret (`^`) allows updates that don't change the leftmost non-zero digit — so `^1.2.3` permits anything from 1.2.3 up to (but not including) 2.0.0. Restricting to only the patch range (d) is what a tilde (`~1.2.3`) does instead.",{"id":222,"topic":9,"difficulty":153,"body":223,"options":224,"correct_key":157,"explanation":233},"019f7517-0fc1-7138-8304-4b6d9ee6208c","What is the purpose of the `\"scripts\"` field in `package.json`?",[225,227,229,231],{"key":157,"text":226},"It defines named shell commands runnable via `npm run \u003Cname>`",{"key":160,"text":228},"It declares production dependencies required at runtime",{"key":163,"text":230},"It configures the test framework's matcher functions",{"key":166,"text":232},"It lists which files should be published to npm","`\"scripts\"` maps short names to shell commands, so `npm run test` or `npm run build` invoke whatever command string is registered under that name. Dependencies live under `\"dependencies\"`\u002F`\"devDependencies\"` (b), and published files are controlled by `\"files\"` or `.npmignore` (d).",{"fields":235,"seniorities":410,"interview_shapes":411,"locales":416,"oauth":418,"question_count":421,"coach_enabled":422,"jd_match_enabled":422},[236,261,270,287,311,324,343,362,384,391,397,404],{"key":237,"name_tr":238,"name_en":238,"sort":153,"specializations":239},"backend","Backend",[240,243,246,249,252,255,258],{"key":241,"name":242,"field":237},"general","Genel",{"key":244,"name":245,"field":237},"go","Go",{"key":247,"name":248,"field":237},"python","Python",{"key":250,"name":251,"field":237},"java","Java",{"key":253,"name":254,"field":237},"csharp","C#\u002F.NET",{"key":256,"name":257,"field":237},"nodejs","Node.js",{"key":259,"name":260,"field":237},"php","PHP",{"key":5,"name_tr":6,"name_en":6,"sort":262,"specializations":263},2,[264,265,266,267,268,269],{"key":241,"name":242,"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":241,"name":242,"field":271},{"key":244,"name":245,"field":237},{"key":247,"name":248,"field":237},{"key":250,"name":251,"field":237},{"key":253,"name":254,"field":237},{"key":256,"name":257,"field":237},{"key":259,"name":260,"field":237},{"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":241,"name":242,"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":241,"name":242,"field":312},{"key":247,"name":248,"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":241,"name":242,"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":241,"name":242,"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":241,"name":242,"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":241,"name":242,"field":385},{"key":392,"name_tr":393,"name_en":393,"sort":394,"specializations":395},"data-engineer","Data Engineer",10,[396],{"key":241,"name":242,"field":392},{"key":398,"name_tr":399,"name_en":400,"sort":401,"specializations":402},"game-dev","Oyun Geliştirme","Game Development",11,[403],{"key":241,"name":242,"field":398},{"key":405,"name_tr":406,"name_en":406,"sort":407,"specializations":408},"ml-engineer","ML Engineer",12,[409],{"key":241,"name":242,"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]