2016-02-01 22 views
7

Tôi viết các thành phần đơn giản nhất đó là sử dụng một routeLink:góc 2: thành phần kiểm tra với router

@Component({ 
    selector: 'memorySnippet', 
    templateUrl: '<div class="memory-snippet-wrapper" *ngIf="memory" 
        [routerLink]="['MainPanel', 'MemoryPanel', {'id' : this.memory.id}]">', 
    directives: [CORE_DIRECTIVES, ROUTER_DIRECTIVES] 
}) 
export class MemorySnippetComponent { 
    @Input() memory: Memory; 
} 

Vấn đề xảy ra khi tôi cố gắng thử nghiệm thành phần này. Khoảnh khắc tôi thêm các liên kết router của Karma là phàn nàn về các nhà cung cấp thiếu:

Sau khi thêm tất cả các nhà cung cấp Karma được hỏi tôi có được điều này:

beforeEachProviders(() => [ 
    MemorySnippetComponent, 
    MEMORY_SERVICE_PROVIDERS, 
    ROUTER_PROVIDERS, 
    ApplicationRef 
]); 

Nhưng khi tôi chạy thử nghiệm tôi nhận được lỗi này:

EXCEPTION: EXCEPTION: Error during instantiation of Token RouterPrimaryComponent! (RouterLink -> Router -> RouteRegistry -> Token RouterPrimaryComponent).

ORIGINAL EXCEPTION: unimplemented

ORIGINAL STACKTRACE: Error: unimplemented

Tôi đang làm gì sai ??? Là Angular 2 (2.0.0-beta.1) chưa sẵn sàng cho các thành phần thử nghiệm với các chỉ thị router?

+0

Đó sẽ là giải thích của tôi về lỗi này. Nó vẫn đang trong giai đoạn thử nghiệm và các hướng dẫn kiểm tra chưa được phát hành cho loại thử nghiệm này. Có lẽ bạn có thể tìm thấy RouterPrimaryComponent trong nguồn và thực hiện giao diện sau đó sử dụng 'cung cấp (RouterPrimaryComponent, {useClass: MyRouterPrimaryComponent})' để ghi đè lên nó và có thể làm cho thử nghiệm của bạn hoạt động. – SnareChops

+0

kiểm tra repo với hạt giống thử nghiệm từ nhóm Angular -> https://github.com/juliemr/ng2-test-seed từ cuộc trò chuyện này https://www.youtube.com/watch?v=C0F2E-PRm44 –

+0

Cú pháp đó có cần trả lại không? 'beforeEachProviders (() => {return [ MemorySnippetComponent, MEMORY_SERVICE_PROVIDERS, ROUTER_PROVIDERS, ApplicationRef ]}); –

Trả lời

5

Đối với RC4 với router mới hiện nay sử dụng ...

beforeEach(() => addProviders([ 
    APP_ROUTER_PROVIDERS, // must be first 
    {provide: APP_BASE_HREF, useValue: '/'}, // must be second 
    {provide: ActivatedRoute, useClass: Mock}, 
    {provide: Router, useClass: Mock} 
])); 

Một dự án github sử dụng phương pháp này là ...

https://github.com/danday74/angular2-coverage

9

Bạn nên có một phương pháp beforeEachProviders trông như:

import {MockApplicationRef} from '@angular/core/testing'; 

beforeEachProviders(() => [ 
    ROUTER_PROVIDERS, 
    provide(APP_BASE_HREF, {useValue: '/'}), 
    provide(ROUTER_PRIMARY_COMPONENT, {useValue: YourComponent}), 
    provide(ApplicationRef, {useClass: MockApplicationRef} 
]); 

MockApplicationRef được cung cấp bởi khuôn khổ cho các loại hình kiểm tra.

+0

Cảm ơn bạn @cexbrayat, đã hoạt động! bạn có thể vui lòng trỏ đến nguồn tài liệu đó không? –

+0

Đó là kiểm tra đơn vị từ sách điện tử của tôi ^^ books.ninja-squad.com. Nhưng tôi nghĩ rằng tôi đã tìm thấy nó trong mã nguồn khuôn khổ AFAIR. – cexbrayat

+0

Cuốn sách tuyệt vời, cảm ơn bạn! –

Các vấn đề liên quan