5

मैं क्योंकि यह रूटर निर्माता के लिए पैरामीटर की जरूरत है निम्नलिखित कोड ...मैं एक कोणीय 2 मार्ग कैसे बना सकता हूं?

export class LoginComponent { 
    userName: string; 
    password: string; 
    rememberMe: boolean = false; 
    constructor(private auth: AuthenticationService, 
       private router: Router) { 
     ... 
    } 
    ... 
} 

मैं यूनिट परीक्षण करने के लिए कोशिश कर रहा हूँ, लेकिन मेरा पहला प्रयास विफल हो ....

beforeEach(() => { 
     router = new Router(); 
     component = new LoginComponent(authService, router); 
}); 

है। Here I saw ...

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

लेकिन मैं APP_ROUTER_PROVIDERS या Mock मेरी निर्भरता में कहीं है लगता नहीं है, इसलिए मुझे लगता है कि यह बासी हो सकता है (या मैं निर्भरता की जरूरत है)।

मैं इसे कैसे नकल कर सकता हूं? यह उस परीक्षण के लिए भी कोई फर्क नहीं पड़ता जिस पर मैं काम कर रहा हूं। वर्ग

describe('whatever',() => { 
    let mockRouter: any; 
    ... 

    beforeEach(async(() => { 
    // create your own mock 
    mockRouter = jasmine.createSpyObj('Router', ['navigate']); 

    ... 

    TestBed.configureTestingModule({ 
     declarations: [LoginComponent], 
     providers: [ 
     // provide it by value 
     { provide: Router, useValue: mockRouter }, 
     ... 
     ], 
    }).compileComponents(); 
    })); 

    ... 

}); 

यह नहीं बल्कि करने के लिए "new-अप" कोशिश कर रहा से, परीक्षण बिस्तर के निर्भरता इंजेक्शन का उपयोग करता है:

उत्तर

6

एक सरल मामले के लिए तुम सिर्फ अपने स्वयं के नकली बना सकते हैं और मूल्य द्वारा यह प्रदान करते हैं, उदाहरण के लिए परीक्षण के अंतर्गत।

संदर्भ में एक उदाहरण के लिए, उदाहरण देखें। one of my projects on GitHub

+0

यह वास्तविक परियोजना के तरीके से अलग कैसे होता है (मैंने देखा इससे पहले पोस्ट किया गया)। ऐसा लगता है कि हमें केवल आवश्यकता है ... 'TestBed.configureTestingModule ({आयात: [राउटरटेस्टिंग मॉड्यूल]}); 'और' राउटर = TestBed.get (राउटर);'? मैंने अभी तक इसका परीक्षण नहीं किया है, हालांकि मुझे यकीन नहीं है कि यह काम करता है। – Jackie

+0

@ जैकी आपका क्या मतलब है * "वास्तविक परियोजना" *? – jonrsharpe

+0

https://github.com/angular/angular/blob/master/modules/%40angular/router/test/router.spec.ts – Jackie

2

मैं क्योंकि यह सही प्रतीत होता है इसके बाद के संस्करण जवाब स्वीकार किए जाते हैं ... फिर भी, मैं वास्तव में इसे दूसरे तरीके से लागू किया,

describe("Login Component",() => { 
    let component: LoginComponent; 
    let authService: AuthenticationService; 
    let router: Router; 

    describe("Testing the subscription happens",() => { 
     beforeEach(() => { 
      TestBed.configureTestingModule({imports: [RouterTestingModule]}); 
      router = TestBed.get(Router); 
      authService = new AuthenticationService(); 
      authService.notifications = new Subject(); 
      authService.notifications.subscribe = jasmine.createSpy("SpyToTestNotifications"); 
     }); 
     it("Make sure we try to subscribe to the auth event",() => { 
      component = new LoginComponent(authService, router); 
      expect(authService.notifications.subscribe).toHaveBeenCalled(); 
     }) 
    }); 
}); 

आप इस देख सकते हैं केवल beforeEach में 2 लाइनों की आवश्यकता है ...

TestBed.configureTestingModule({imports: [RouterTestingModule]}); 
router = TestBed.get(Router); 

हालांकि, प्रति @jonrsharpe यह बहुत सी चीजें करता है ताकि आप गारंटी न दे कि अन्य दुष्प्रभाव क्या हो सकते हैं। लेकिन यह तेज़ है, यह गंदा है और ऐसा लगता है कि यह "काम"

2

प्रत्येक परीक्षण के लिए क्वेरी स्ट्रिंग पैरामीटर लोड करने का एक कामकाजी उदाहरण है। कोणीय 2.3 पर काम करता है।

beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     declarations: [ 
     MyViewerComponent, 
     ... 
     ], 
     imports: [ 
     HttpModule, 
     FormsModule, 
     RouterModule, 
     ... 
     ], 
     providers: [ 
     {provide: ActivatedRoute, useValue: {queryParams: {test: 111}}}, 
     {provide: MyService, useClass: MyMockService} 
     ] 
    }) 
     .compileComponents(); 
    })); 
संबंधित मुद्दे