Angular での DI 関数のテスト
Dec 11 2022
runInInjectionContext という名前の新しい静的メソッドが、Angular v15.1 の TestBed に追加されました。
テストを容易にするために、Angular v15.1.0-next.0 にという名前の新しい静的メソッドrunInInjectionContextが追加されました。関数は関数と同様に機能します。モジュールを使用してユーザーをフェッチする関数があるとします。TestBedinject()runInInjectionContextrunInContexthttp
export function getUsers() {
return inject(HttpClient).get<User[]>('users');
}
import { TestBed } from '@angular/core/testing';
import {
HttpClientTestingModule,
HttpTestingController,
} from '@angular/common/http/testing';
describe('Users', () => {
it('should fetch users', () => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
});
const controller = TestBed.inject(HttpTestingController);
TestBed.runInInjectionContext(getUsers).subscribe((users) => {
expect(users.length).toBe(1);
});
controller.expectOne('users').flush([{ id: 1 }]);
});
});
export const FOO = new InjectionToken('FOO', {
providedIn: 'root',
factory() {
return 'foo';
},
});
export function getFoo() {
return inject(FOO);
}
import { TestBed } from '@angular/core/testing';
describe('Foo', () => {
it('should get ', () => {
TestBed.overrideProvider(FOO, { useValue: '' });
const result = TestBed.runInInjectionContext(getFoo);
expect(result).toEqual('');
});
it('should get ', () => {
TestBed.overrideProvider(FOO, { useValue: '' });
const result = TestBed.runInInjectionContext(getFoo);
expect(result).toEqual('');
});
});
import { TestBed, fakeAsync } from '@angular/core/testing';
describe('Bar', () => {
it('should work with fakeAsync', fakeAsync(() => {
TestBed.overrideProvider(BAR, { useValue: Promise.resolve('') });
let result = '';
TestBed.runInInjectionContext(getBar).then((v) => {
result = v;
});
flushMicrotasks();
expect(result).toEqual('');
}));
});
TestBed.inject(EnvironmentInjector).runInContext(getUsers);

![とにかく、リンクリストとは何ですか?[パート1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































