Skip to content

Commit cc20045

Browse files
authored
chore(angular-query): add injection context tests (#7993)
1 parent 4b2c8c5 commit cc20045

File tree

6 files changed

+130
-2
lines changed

6 files changed

+130
-2
lines changed

packages/angular-query-experimental/src/__tests__/inject-infinite-query.test.ts

+28
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TestBed } from '@angular/core/testing'
22
import { afterEach } from 'vitest'
3+
import { Injector } from '@angular/core'
34
import { QueryClient, injectInfiniteQuery, provideAngularQuery } from '..'
45
import { expectSignals, infiniteFetcher } from './test-utils'
56

@@ -59,4 +60,31 @@ describe('injectInfiniteQuery', () => {
5960
status: 'success',
6061
})
6162
})
63+
64+
describe('injection context', () => {
65+
test('throws NG0203 with descriptive error outside injection context', () => {
66+
expect(() => {
67+
injectInfiniteQuery(() => ({
68+
queryKey: ['injectionContextError'],
69+
queryFn: infiniteFetcher,
70+
initialPageParam: 0,
71+
getNextPageParam: () => 12,
72+
}))
73+
}).toThrowError(/NG0203(.*?)injectInfiniteQuery/)
74+
})
75+
76+
test('can be used outside injection context when passing an injector', () => {
77+
const query = injectInfiniteQuery(
78+
() => ({
79+
queryKey: ['manualInjector'],
80+
queryFn: infiniteFetcher,
81+
initialPageParam: 0,
82+
getNextPageParam: () => 12,
83+
}),
84+
TestBed.inject(Injector),
85+
)
86+
87+
expect(query.status()).toBe('pending')
88+
})
89+
})
6290
})

packages/angular-query-experimental/src/__tests__/inject-is-fetching.test.ts

+15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TestBed, fakeAsync, flush, tick } from '@angular/core/testing'
22
import { beforeEach, describe, expect } from 'vitest'
3+
import { Injector } from '@angular/core'
34
import {
45
QueryClient,
56
injectIsFetching,
@@ -34,4 +35,18 @@ describe('injectIsFetching', () => {
3435
flush()
3536
expect(isFetching()).toStrictEqual(0)
3637
}))
38+
39+
describe('injection context', () => {
40+
test('throws NG0203 with descriptive error outside injection context', () => {
41+
expect(() => {
42+
injectIsFetching()
43+
}).toThrowError(/NG0203(.*?)injectIsFetching/)
44+
})
45+
46+
test('can be used outside injection context when passing an injector', () => {
47+
expect(
48+
injectIsFetching(undefined, TestBed.inject(Injector)),
49+
).not.toThrow()
50+
})
51+
})
3752
})

packages/angular-query-experimental/src/__tests__/inject-is-mutating.test.ts

+15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { beforeEach, describe } from 'vitest'
22
import { TestBed, fakeAsync, tick } from '@angular/core/testing'
3+
import { Injector } from '@angular/core'
34
import {
45
QueryClient,
56
injectIsMutating,
@@ -38,4 +39,18 @@ describe('injectIsMutating', () => {
3839
expect(isMutating()).toBe(1)
3940
})
4041
}))
42+
43+
describe('injection context', () => {
44+
test('throws NG0203 with descriptive error outside injection context', () => {
45+
expect(() => {
46+
injectIsMutating()
47+
}).toThrowError(/NG0203(.*?)injectIsMutating/)
48+
})
49+
50+
test('can be used outside injection context when passing an injector', () => {
51+
expect(
52+
injectIsMutating(undefined, TestBed.inject(Injector)),
53+
).not.toThrow()
54+
})
55+
})
4156
})

packages/angular-query-experimental/src/__tests__/inject-mutation-state.test.ts

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, input, signal } from '@angular/core'
1+
import { Component, Injector, input, signal } from '@angular/core'
22
import { TestBed } from '@angular/core/testing'
33
import { describe, expect, test, vi } from 'vitest'
44
import { By } from '@angular/platform-browser'
@@ -173,5 +173,22 @@ describe('injectMutationState', () => {
173173

174174
expect(spans).toEqual(['success', 'error'])
175175
})
176+
177+
describe('injection context', () => {
178+
test('throws NG0203 with descriptive error outside injection context', () => {
179+
expect(() => {
180+
injectMutationState()
181+
}).toThrowError(/NG0203(.*?)injectMutationState/)
182+
})
183+
184+
test('can be used outside injection context when passing an injector', () => {
185+
const injector = TestBed.inject(Injector)
186+
expect(
187+
injectMutationState(undefined, {
188+
injector,
189+
}),
190+
).not.toThrow()
191+
})
192+
})
176193
})
177194
})

packages/angular-query-experimental/src/__tests__/inject-mutation.test.ts

+31-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import { Component, Injectable, inject, input, signal } from '@angular/core'
1+
import {
2+
Component,
3+
Injectable,
4+
Injector,
5+
inject,
6+
input,
7+
signal,
8+
} from '@angular/core'
29
import { TestBed } from '@angular/core/testing'
310
import { describe, expect, vi } from 'vitest'
411
import { By } from '@angular/platform-browser'
@@ -494,4 +501,27 @@ describe('injectMutation', () => {
494501
).toEqual('test')
495502
expect(errorSpy).not.toHaveBeenCalled()
496503
})
504+
505+
describe('injection context', () => {
506+
test('throws NG0203 with descriptive error outside injection context', () => {
507+
expect(() => {
508+
injectMutation(() => ({
509+
mutationKey: ['injectionContextError'],
510+
mutationFn: () => Promise.resolve(),
511+
}))
512+
}).toThrowError(/NG0203(.*?)injectMutation/)
513+
})
514+
515+
test('can be used outside injection context when passing an injector', () => {
516+
expect(() => {
517+
injectMutation(
518+
() => ({
519+
mutationKey: ['injectionContextError'],
520+
mutationFn: () => Promise.resolve(),
521+
}),
522+
TestBed.inject(Injector),
523+
)
524+
}).not.toThrow()
525+
})
526+
})
497527
})

packages/angular-query-experimental/src/__tests__/inject-query.test.ts

+23
Original file line numberDiff line numberDiff line change
@@ -618,4 +618,27 @@ describe('injectQuery', () => {
618618

619619
expect(fixture.componentInstance.query.data()).toEqual('test name 2')
620620
}))
621+
622+
describe('injection context', () => {
623+
test('throws NG0203 with descriptive error outside injection context', () => {
624+
expect(() => {
625+
injectQuery(() => ({
626+
queryKey: ['injectionContextError'],
627+
queryFn: simpleFetcher,
628+
}))
629+
}).toThrowError(/NG0203(.*?)injectQuery/)
630+
})
631+
632+
test('can be used outside injection context when passing an injector', () => {
633+
const query = injectQuery(
634+
() => ({
635+
queryKey: ['manualInjector'],
636+
queryFn: simpleFetcher,
637+
}),
638+
TestBed.inject(Injector),
639+
)
640+
641+
expect(query.status()).toBe('pending')
642+
})
643+
})
621644
})

0 commit comments

Comments
 (0)