Bird
Raised Fist0
Angularframework~5 mins

TestBed configuration in Angular - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is TestBed in Angular testing?
TestBed is Angular's primary API for writing unit tests. It allows you to configure and create an Angular testing module that mimics an Angular @NgModule, so you can test components, services, and other parts in isolation.
Click to reveal answer
beginner
How do you configure a testing module with TestBed?
You use TestBed.configureTestingModule({ declarations: [...], imports: [...], providers: [...] }) to set up components, modules, and services needed for your test.
Click to reveal answer
intermediate
Why do you call TestBed.compileComponents() after configuring TestBed?
Calling compileComponents() compiles the declared components' templates and CSS asynchronously. This is needed before creating component instances in tests.
Click to reveal answer
beginner
What is the purpose of TestBed.createComponent()?
It creates an instance of a component along with its template and styles inside the testing environment. This lets you interact with the component as if it was running in the app.
Click to reveal answer
intermediate
How can you provide a mock service in TestBed configuration?
In the providers array, use { provide: RealService, useClass: MockService } to replace the real service with a mock version during tests.
Click to reveal answer
Which TestBed method sets up the testing module with components and services?
AconfigureTestingModule
BcreateComponent
CcompileComponents
Dinject
What does TestBed.createComponent() return?
AA compiled module
BA component fixture with access to the component instance and DOM
CA service instance
DA promise
Why might you use useClass in TestBed providers?
ATo declare a component
BTo import a module
CTo compile templates
DTo replace a real service with a mock service
When should you call compileComponents() in TestBed?
AAfter configureTestingModule and before creating components
BBefore configureTestingModule
CAfter creating components
DIt is optional and never needed
Which array in TestBed configuration holds components you want to test?
Aimports
Bproviders
Cdeclarations
Dexports
Explain how to set up TestBed to test an Angular component with a mock service.
Think about declarations, providers, compileComponents, and createComponent steps.
You got /4 concepts.
    Describe the role of TestBed in Angular unit testing and why it is important.
    Focus on how TestBed mimics Angular's environment for tests.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of Angular's TestBed in unit testing?
      easy
      A. To create a small Angular environment for testing components and services
      B. To compile the entire Angular application for production
      C. To replace Angular modules with plain JavaScript modules
      D. To generate HTML templates automatically

      Solution

      1. Step 1: Understand TestBed's role

        TestBed sets up a lightweight Angular environment to test parts of your app without running the full app.
      2. Step 2: Compare options

        Only To create a small Angular environment for testing components and services describes this testing environment purpose. Others describe unrelated tasks.
      3. Final Answer:

        To create a small Angular environment for testing components and services -> Option A
      4. Quick Check:

        TestBed purpose = create test environment [OK]
      Hint: TestBed sets up Angular test environment, not full app build [OK]
      Common Mistakes:
      • Confusing TestBed with production build tools
      • Thinking TestBed generates templates automatically
      • Assuming TestBed replaces Angular modules
      2. Which of the following is the correct way to declare a component in TestBed configuration?
      easy
      A. TestBed.configureTestingModule({ imports: [MyComponent] })
      B. TestBed.configureTestingModule({ bootstrap: [MyComponent] })
      C. TestBed.configureTestingModule({ providers: [MyComponent] })
      D. TestBed.configureTestingModule({ declarations: [MyComponent] })

      Solution

      1. Step 1: Identify where components go in TestBed

        Components must be listed under declarations in the configuration.
      2. Step 2: Check each option

        Only TestBed.configureTestingModule({ declarations: [MyComponent] }) uses declarations with the component. Others misuse imports, providers, or bootstrap.
      3. Final Answer:

        TestBed.configureTestingModule({ declarations: [MyComponent] }) -> Option D
      4. Quick Check:

        Components go in declarations [OK]
      Hint: Components go in declarations, modules in imports, services in providers [OK]
      Common Mistakes:
      • Putting components inside imports or providers
      • Using bootstrap in TestBed config (only for app modules)
      • Forgetting to declare components causes errors
      3. Given this TestBed setup, what will fixture.componentInstance.title output?
      TestBed.configureTestingModule({
        declarations: [MyComponent]
      }).compileComponents();
      
      const fixture = TestBed.createComponent(MyComponent);
      fixture.detectChanges();
      
      // MyComponent code:
      // title = 'Hello Test';
      medium
      A. null
      B. 'Hello Test'
      C. undefined
      D. Error: Component not declared

      Solution

      1. Step 1: Confirm component declaration and compilation

        MyComponent is declared and compiled, so it can be created and used.
      2. Step 2: Understand fixture and detectChanges

        Creating fixture and calling detectChanges initializes component and bindings, so title is set.
      3. Final Answer:

        'Hello Test' -> Option B
      4. Quick Check:

        Declared + compiled + detectChanges = property accessible [OK]
      Hint: Declare and compile components before accessing properties [OK]
      Common Mistakes:
      • Forgetting to call compileComponents causes errors
      • Not calling detectChanges leaves properties uninitialized
      • Assuming properties are undefined without initialization
      4. What is the error in this TestBed setup?
      TestBed.configureTestingModule({
        declarations: [MyComponent]
      });
      
      const fixture = TestBed.createComponent(MyComponent);
      fixture.detectChanges();
      medium
      A. detectChanges() should be called before createComponent()
      B. MyComponent should be in imports, not declarations
      C. Missing call to compileComponents() before createComponent()
      D. No error, this setup is correct

      Solution

      1. Step 1: Check TestBed configuration steps

        When testing components with templates, compileComponents() must be called to compile templates asynchronously.
      2. Step 2: Identify missing step

        The code misses compileComponents() before creating the component, which can cause errors.
      3. Final Answer:

        Missing call to compileComponents() before createComponent() -> Option C
      4. Quick Check:

        compileComponents() required before createComponent() [OK]
      Hint: Always call compileComponents() before createComponent() for templates [OK]
      Common Mistakes:
      • Skipping compileComponents() causes template errors
      • Putting components in imports instead of declarations
      • Calling detectChanges() too early
      5. You want to test a component that uses a service injected via constructor. Which TestBed configuration is correct to provide the service mock?
      hard
      A. TestBed.configureTestingModule({ declarations: [MyComponent], providers: [{ provide: MyService, useValue: mockService }] })
      B. TestBed.configureTestingModule({ declarations: [MyComponent], imports: [MyService] })
      C. TestBed.configureTestingModule({ declarations: [MyComponent], declarations: [MyService] })
      D. TestBed.configureTestingModule({ providers: [MyComponent, MyService] })

      Solution

      1. Step 1: Understand service injection in TestBed

        Services are provided via providers array. To mock a service, use provide with useValue.
      2. Step 2: Analyze options

        TestBed.configureTestingModule({ declarations: [MyComponent], providers: [{ provide: MyService, useValue: mockService }] }) correctly provides a mock service. TestBed.configureTestingModule({ declarations: [MyComponent], imports: [MyService] }) wrongly puts service in imports. TestBed.configureTestingModule({ declarations: [MyComponent], declarations: [MyService] }) wrongly declares service as component. TestBed.configureTestingModule({ providers: [MyComponent, MyService] }) wrongly provides component as service.
      3. Final Answer:

        TestBed.configureTestingModule({ declarations: [MyComponent], providers: [{ provide: MyService, useValue: mockService }] }) -> Option A
      4. Quick Check:

        Mock services go in providers with provide/useValue [OK]
      Hint: Use providers with provide and useValue for service mocks [OK]
      Common Mistakes:
      • Putting services in imports or declarations
      • Providing components instead of services
      • Not mocking services causing real calls