2016-08-07 5 views
6

मैं ऐसे घटक का परीक्षण नहीं कर सकता जो अंगुलर 2 में दिनांक पाइप का उपयोग करता है (फैंटॉमजेएस के माध्यम से कर्म का उपयोग करके)। जब मैं कोशिश, मैं मूल अपवाद: ReferenceError: चर नहीं मिली: Intlकोणीय 2 में दिनांक पाइप का उपयोग करके मैं तत्व के प्रतिपादन का परीक्षण कैसे कर सकता हूं?

यहाँ अपने पूरे कल्पना फ़ाइल है:

import { provide, PLATFORM_PIPES } from '@angular/core'; 
import { DatePipe } from '@angular/common'; 
import { addProviders, async, inject } from '@angular/core/testing'; 

import { Post, PostComponent, PostHtmlComponent } from './'; 
import { usingComponentFixture } from '../../test-helpers'; 

describe('Component: Post',() => { 
    beforeEach(() => { 
    provide(PLATFORM_PIPES, {useValue: DatePipe, multi: true }); 
    addProviders([PostComponent, PostHtmlComponent, ]); 
    }); 

    it('should render an h1 tag with text matching the post title', 
    usingComponentFixture(PostComponent, fixture => { 
     let component = <PostComponent>fixture.componentInstance; 
     let element = fixture.nativeElement; 

     component.post = <Post>{ title: 'Hello', publishedOn: new Date('8/5/2016') }; 
     fixture.detectChanges(); 
     expect(element.querySelector('.blog-post-header h1').innerText).toBe('Hello'); 
    }) 
); 
}); 

और इस घटक टेम्पलेट है:

<div class="col-lg-8 col-md-7 col-sm-6"> 
    <h1>{{post.title}}</h1> 
    <p class="lead">{{post.publishedOn | date:'fullDate'}}</p> 
</div> 

उत्तर

4

मैं इस मुद्दे को हल करने में सक्षम था।

  1. NPM स्थापित कर्म-intl-शिम --save-देव
  2. जोड़ें 'intl-शिम' karma.conf.js में चौखटे संग्रह करने के लिए
  3. जोड़ें: यहाँ मैं करना था क्या कर्म-परीक्षण shim.js के लिए निम्न (यह फ़ाइलों karma.conf.js के संग्रह में संदर्भित है)

    require('karma-intl-shim'); 
    require('./en-us.js'); // copied from https://github.com/andyearnshaw/Intl.js/blob/master/locale-data/json/en-US.json 
    Intl.__addLocaleData(enUsLocaleData); 
    
+2

'' 'आयात 'intl/स्थान-डाटा/jsonp/en-us.js '; '' 'का उपयोग कहीं और से कॉपी करने के बजाय किया जा सकता है। –

+0

क्या एक ही मुद्दे की सलाह है लेकिन कोणीय जेएस 1? –

4

परीक्षण के लिए मैं तारीख पाइप नकली:

@Pipe({ 
    name: 'date', 
    pure: false // required to update the value when the promise is resolved 
}) 

export class MockedDatePipe implements Pipe { 
    name: string = 'date'; 

    transform(query: string, ...args: any[]): any { 
     return query; 
    } 
} 

फिर जब मैं परीक्षण मॉड्यूल कॉन्फ़िगर मैं इसे घोषणा में इंजेक्षन:

TestBed.configureTestingModule({ 
    providers: [ 
     SelectionDispatcher, 
     { provide: MyService, useClass: MockedMyServiceService } 
    ], 
    declarations: [ MyComponent, MockedTranslatePipe, MockedDatePipe ] 
}); 
+0

धन्यवाद, यह एक अच्छा विचार है। मैं चारों ओर गड़बड़ कर रहा हूं अनुवाद मॉड्यूल, लेकिन इसे काम करने के लिए नहीं मिल सका। परीक्षण अनुवाद के बारे में नहीं है, लेकिन अनुवाद पाइप रास्ते में हो रहा था। – MartijnK

+0

क्या आपको अभी भी तारीखों के लिए पॉलीफिल जोड़ना है? यह पता नहीं लगा सकता कि कैसे प्राप्त किया जाए संदर्भ त्रुटि के आसपास: चर नहीं मिल सकता: Intl। – Winnemucca

0

देना पाइप = नए DatePipe ('एन');

उम्मीद (page.myDate.nativeElement.innerHTML) .toBe (pipe.transform (model.date, 'dd/एम एम/yyyy');

+1

आमतौर पर कोडिंग समाधान के साथ कुछ स्पष्टीकरण प्रदान करना सर्वोत्तम होता है। –

+0

आप रेफरेंस एरर के आसपास कैसे पहुंचे: चर नहीं मिल सकता: http: // localhost में intl: 9877karma-test-shim.js (लाइन 20014)? – Winnemucca

संबंधित मुद्दे

 संबंधित मुद्दे