angular - कोणीय 2 इकाई परीक्षण-त्रुटि प्राप्त करना 'एनजी लोड करने में असफल रहा:///DynamicTestModule/module.ngfactory.js'




webpack karma-runner (6)

मेरे पास कोणीय 2 वेबपैक अनुप्रयोग है, सभी वेबपैक, कर्म विन्यास जो कि कोणीय.इयो वेबपैक गाइड के अनुसार बनाया गया है। मैं aot का उपयोग नहीं कर रहा हूँ। मैं अपने घटकों का परीक्षण करने के लिए चमेली इकाई परीक्षण कल्पना लिख ​​रहा हूं। पहले मैंने async ब्लॉक के बिना कोशिश की, उस स्थिति में, इकाई परीक्षण केवल fixture.detectChanges () कॉल तक ही निष्पादित होता है, कोड उसके बाद निष्पादित नहीं होता है। लगता है जैसे fixture.detectChanges कॉल असीम रूप से अवरुद्ध हो रही है।

मैंने async ब्लॉक में कोड शामिल करके कोशिश की। तब मुझे निम्नलिखित त्रुटि मिलती है। त्रुटि: 'XMLHttpRequest' पर 'send' को अंजाम देने में विफल: 'ng' लोड करने में विफल: /// डायनामिकटेस्टमॉडल /module.ngfactory.js '

कोड async के बिना

beforeeach(()=> {
TestBed.configureTestingModule({
imports:[],
declaration :[Mycomp],
providers:[{ provide:MyService, useclass:MyMockService}]
});
 fixture=TestBed.createComponent(Mycomp);
 console.log(' before detect changes'):
 fixture.detectChanges():
 console.log('after detect changes');// this is not getting   
    logged .. karma shows 0 of 1 executed successfully

 });

Async के साथ

  beforeeach(async(()=> {
 TestBed.configureTestingModule({
  imports:[],
  declaration :[Mycomp],
  providers:[{ provide:MyService,       useclass:MyMockService}]
  });
   fixture=TestBed.createComponent(Mycomp);
    fixture.detectChanges():
  }));

डायनामिक्टेस्टमोड्यूल / मॉड्यूल.ngfactory.js लोड करने में त्रुटि हो रही है


मुझे अगले दिन उसी त्रुटि से काट दिया गया था - इस बार समस्या को HTML फ़ाइल में दफन किया गया था। *ngIf लिए एक सरल सरणी लंबाई परीक्षण का उपयोग करना

<ng-container *ngIf="myArray.length > 0">

में refactored किया जाना था

<ng-container *ngIf="myArrayNotEmpty">

में एक गटर के साथ:

get myArrayNotEmpty(){
  return this.myArray && this.myArray.length > 0;
}

मैं थोड़ा चिड़चिड़ा हूं, हालांकि इस तरह के कई कारण एक बहुत भ्रामक और अनपेक्षित संदेश द्वारा कवर किए जाते हैं।


मेरे पास भी यह मुद्दा था और यह विकृत डेटा के कारण था। मेरे घटक में मेरी एक सेवा थी जिसने एक http कॉल किया।

कुछ इस तरह: ( सेवा कोड )

getData() {
   return this.http.get(obj);
}

घटक में मैंने इस फ़ंक्शन को बुलाया और इसकी सदस्यता ली: ( घटक कोड )

this.service.getData().subscribe((data) => {
  this.componentData = data.things; //**<=== part that broke everything**
}, (error) => {
  console.log(error);
});

उपाय:

जब मैंने सेवा फ़ंक्शन का मज़ाक उड़ाया तो मैं उन विशेषताओं को वापस करने में विफल रहा, जिनमें विशेषता things । यह वही है जो XMLHttpRequest विफलता के कारण होता है, मुझे लगता है कि कोणीय ऐसा लगता है कि त्रुटि हुई जैसे कि यह HTTP अनुरोध था। यह सुनिश्चित करते हुए कि मैं किसी भी नकली HTTP अनुरोध पर सही विशेषताओं को लौटाता हूं, मुद्दों को तय किया।

आशा है, इससे स्थिति स्पष्ट हो जाएगी। नीचे मॉक के कार्यान्वयन के लिए कोड है।

( Components.specs )

function fakeSubscribe(returnValue,errorValue) {
  return {
    subscribe:function(callback,error){
      callback(returnValue);
      error(errorValue);
    }
  }
}



 class MockService {
      getData() {
        var fakeData = {
          things:[]
        }
        return fakeSubscribe(fakeData,0);
      }
   }

मेरे मामले में, मेरी नकली सेवा घटक के द्वारा ngOnInit पद्धति में एक्सेस किए गए कुछ सार्वजनिक चर गायब थे।


मैं कल ही इस मुद्दे पर भाग गया। समस्या यह थी कि मेरे घटक वर्ग पर एक इनपुट () संपत्ति थी जिसे मैं परीक्षण में सेट नहीं कर रहा था। उदाहरण के लिए, my-Components.ts में:

@Component({
  selector: 'my-component'
})
export class MyComponent {
  @Input() title: string;
}

और मेरे-घटक .spec.ts:

beforeEach(() => {
  fixture = TestBed.createComponent(MyComponent);
  component = fixture.componentInstance;
  component.title = 'Hello there!' // <-- this is required!
  fixture.detectChanges();
});

या आप कहीं घटक में एक डिफ़ॉल्ट मान प्रदान कर सकते हैं। किसी भी तरह से, यदि कोई इनपुट सेट नहीं है तो परीक्षण क्रैश हो जाएगा और आपको वह अनपेक्षित त्रुटि मिल जाएगी।

नोट: ng test -sm=false चलाने से समस्या के कारण वास्तविक त्रुटि संदेश मिलेगा। साभार: https://.com/a/45802115/61311


यह सबसे धोखा देने वाला त्रुटि संदेश है जो मैंने कभी भी कोणीय में सामना किया है।

मेरे मामले में इसका भेजने से कोई लेना-देना नहीं है, XmlHttpRequest से कोई लेना-देना नहीं है - कम से कम उस स्तर पर नहीं जिस पर आप संदेश का पालन करने की कोशिश कर रहे हैं।

यह एक वर्ग का मजाक उड़ाने के बारे में था, जिसका नाम ngrx / store था। मैंने एक कंटेनर में दो अवलोकनीय विधियाँ पेश कीं, जिन्हें पहले मेरी नकली कक्षा में शामिल नहीं किया गया था और मैं ऐसा करना भूल गया था जब मैंने उन का उपयोग करना शुरू किया था। एक बार मॉक-अप में जोड़ा गया, त्रुटि दूर हो गई।

... कर्मा को XmlHttpRequest से 'भेजें' को निष्पादित करने में सक्षम होने को छोड़कर , जो भी इसका मतलब है।


--sourcemaps=false साथ परीक्षण चलाना, कर्म को चुपचाप विफल नहीं करेगा, लेकिन आपको इसके बजाय त्रुटि के बारे में कुछ विवरण देगा।







karma-runner