Saya menguji unit komponen yang digunakan untuk mengedit objek. Objek memiliki keunikan id
yang digunakan untuk mengambil objek tertentu dari larik objek yang dihosting di layanan. Spesifik id
diperoleh melalui parameter yang diteruskan melalui perutean, khususnya melalui ActivatedRoute
kelas.
Konstruktornya adalah sebagai berikut:
constructor(private _router:Router, private _curRoute:ActivatedRoute, private _session:Session) {
}
ngOnInit() {
this._curRoute.params.subscribe(params => {
this.userId = params['id'];
this.userObj = this._session.allUsers.filter(user => user.id.toString() === this.userId.toString())[0];
Saya ingin menjalankan pengujian unit dasar pada komponen ini. Namun, saya tidak yakin bagaimana saya dapat memasukkan id
parameter, dan komponen membutuhkan parameter ini.
Ngomong-ngomong: Saya sudah memiliki olok-olok untuk Session
layanan tersebut, jadi jangan khawatir.
Uncaught NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'ng:///DynamicTestModule/HomeContentComponent.ngfactory.js'. at http://localhost:9876/_karma_webpack_/polyfills.bundle.js:2605
of
harus digunakan sendiri. Anda juga mungkin akan menggunakanRouterTestingModule
alih-alih kode jawaban ini.Saya telah menemukan cara untuk melakukan ini!
Karena
ActivatedRoute
layanan, layanan tiruan untuk itu dapat didirikan. Sebut saja layanan tiruan iniMockActivatedRoute
. Kami akan memperpanjangActivatedRoute
diMockActivatedRoute
, sebagai berikut:Garis
super(null, ....)
menginisialisasi kelas super, yang memiliki empat parameter wajib. Namun, dalam hal ini, kami tidak memerlukan apa pun dari salah satu parameter ini, jadi kami menginisialisasinya kenull
nilai. Yang kita butuhkan hanyalah nilaiparams
yang merupakanObservable<>
. Oleh karena itu, denganthis.params
, kita mengganti nilai dariparams
dan menginisialisasinya menjadiObservable<>
parameter yang diandalkan oleh subjek uji.Kemudian, seperti layanan tiruan lainnya, lakukan inisialisasi dan ganti penyedia komponen.
Semoga berhasil!
sumber
super
atauObservable
. Dari mana asalnya?super()
dibuat.Observable
berasal darirxjs/Observable
atau hanyarxjs
bergantung pada versi Anda. Anda akan mendapatkannya menggunakanimport {Observable} from 'rxjs'
.Di angular 8+ ada RouterTestingModule, yang dapat Anda gunakan untuk memiliki akses ke ActivatedRoute atau Router komponen. Anda juga dapat meneruskan rute ke RouterTestingModule dan membuat mata-mata untuk metode rute yang diminta.
Misalnya di komponen saya, saya punya:
Dan dalam pengujian saya, saya memiliki:
dan kemudian di bagian 'itu':
Dengan cara yang sama, saya pikir Anda dapat menguji langsung paramMap melalui metode spyOnProperty melati, dengan mengembalikan kelereng yang dapat diamati atau menggunakan kelereng rxjs. Ini mungkin menghemat waktu & juga tidak perlu mempertahankan kelas tiruan tambahan. Semoga bermanfaat dan masuk akal.
sumber
Inilah cara saya mengujinya di angular 2.0 terbaru ...
dan di bagian Penyedia
sumber
Cukup tambahkan tiruan dari ActivatedRoute:
...
sumber
Untuk beberapa orang yang mengerjakan Angular> 5, jika Observable.of (); tidak bekerja maka mereka dapat menggunakan hanya () dengan mengimpor import {of} dari 'rxjs';
sumber
Mengalami masalah yang sama saat membuat rangkaian pengujian untuk jalur perutean sebagai:
Di dalam komponen, saya menginisialisasi properti yang diteruskan sebagai:
Saat menjalankan pengujian, jika Anda tidak meneruskan nilai properti di ActivatedRoute tiruan "useValue", Anda akan mendapatkan tidak terdefinisi saat mendeteksi perubahan menggunakan "fixture.detectChanges ()". Ini karena nilai tiruan untuk ActivatedRoute tidak berisi properti params.property. Kemudian, ini diperlukan untuk useValue tiruan untuk memiliki params tersebut agar fixture dapat menginisialisasi 'this.property' dalam komponen. Anda dapat menambahkannya sebagai:
Anda dapat memulai pengujian sebagai contoh:
Sekarang, katakanlah Anda ingin menguji nilai properti yang berbeda, lalu Anda dapat memperbarui ActivatedRoute tiruan Anda sebagai:
Semoga ini membantu!
sumber
Menambahkan penyedia di kelas pengujian sebagai:
sumber