'XMLHttpRequest' এ 'প্রেরণ' কার্যকর করতে ব্যর্থ কৌণিক পরীক্ষা


145

আমি আমার কৌনিক 4.1.0 উপাদানটি পরীক্ষা করার চেষ্টা করছি -

export class CellComponent implements OnInit {
  lines: Observable<Array<ILine>>;
  @Input() dep: string;
  @Input() embedded: boolean;
  @Input() dashboard: boolean;
  constructor(
    public dataService: CellService,
    private route: ActivatedRoute,
    private router: Router, private store: Store<AppStore>) {
  }
}

তবে, একটি সাধারণ "তৈরি করা উচিত" পরীক্ষাটি এই ক্রিপ্টিক ত্রুটি ছুড়ে দেয় ...

নেটওয়ার্কএরর: এক্সএমএলএইচটিপিআরকুয়েস্টে 'প্রেরণ' কার্যকর করতে ব্যর্থ: 'এনজি: ///DynamicTestModule/module.ngfactory.js' লোড করতে ব্যর্থ।

সুতরাং আমি এই প্রশ্নটি পেয়েছি , যা পরামর্শ দেয় যে সমস্যাটির উপাদানটির এমন @Input)_প্যারাম রয়েছে যা সেট করা নেই, তবে আমি যদি আমার পরীক্ষাটি এভাবে পরিবর্তন করি তবে:

  it('should create', inject([CellComponent], (cmp: CellComponent) => {
    cmp.dep = '';
    cmp.embedded = false;
    cmp.dashboard = false;
    expect(cmp).toBeTruthy();
  }));

তারপরে আমি এখনও একই সমস্যাটি পাই, একইভাবে, আমি যদি @Input()উপাদানটি থেকে টীকাগুলি সরিয়ে ফেলি , তবুও কোনও পার্থক্য নেই। আমি কীভাবে এই পরীক্ষাগুলি পাস করতে পারি?


1
উপাদান তৈরি করতে, আপনাকে সমস্ত নির্ভরতা সরবরাহ করতে হবে। আপনি কি আপনার সমস্ত পরীক্ষার সেটআপ প্রদর্শন করতে পারেন? আমি plnkr
আলেকসান্দ্র পেট্রোভস্কিজ

1
আমার এই একই সমস্যা ছিল এবং আপনি একই পোস্টগুলি পেয়েছি। আমি একটি সমাধান খুঁজে পেতে সক্ষম হয়েছিল। আমি অন্য প্রশ্নে পোস্ট শেষ পর্যন্ত কিন্তু আপনি একবার দেখে নিতে পারেন: stackoverflow.com/a/45419372/6739517 আশা করি এটা সাহায্য করে!
নাইলস ট্যানার

উত্তর:


342

এটি নতুন কৌণিক ক্লাইটের একটি সমস্যা। আপনার পরীক্ষাটি চালান --sourcemaps=falseএবং আপনি সঠিক ত্রুটির বার্তা পাবেন।

বিশদটি এখানে দেখুন: https://github.com/angular/angular-cli/issues/7296

সম্পাদনা করুন:

এর জন্য শর্টহ্যান্ড হ'ল:

ng test -sm=false

কৌণিক 6 হিসাবে কমান্ডটি হ'ল:

ng test --source-map=false


19
আপনি পরম নায়ক। আমি এটি না পাওয়া পর্যন্ত কৌণিক ইউনিট পরীক্ষার ত্রুটি বার্তাগুলির তথ্যের অভাব নিয়ে হতাশায় আমি প্রাচীরের বিরুদ্ধে মাথা ঘুরছিলাম। অনেক কৃতজ্ঞ.
অ্যালান স্মিথ

1
এই উত্তর সত্যিই আমার দিন বাঁচা! পুরো দিন-রাত ব্যয় করার পরে আমি সাধারণভাবে বিকাশের কাছাকাছি এসেছি ঠিক করার চেষ্টা করে যাতে আমি বিল্ড ব্যর্থ হওয়া ব্যক্তি হওয়া বন্ধ করে দিতে পারি
user1806692

আজ আমি এই ত্রুটি বার্তাটি দেখতে পেয়েছি: হেডলেসক্রোম 65.0.3325 (ম্যাক ওএস এক্স 10.13.4) এরর {"বার্তা": "স্ক্রিপ্ট ত্রুটি \ : 0 "} এবং --sourcemap = মিথ্যা অপসারণ আরও তথ্য দেখায়।
পেংঘুই

11
এনজি টেস্ট --সোর্স-ম্যাপ = মিথ্যা ...
কৌনিক

@ danday74 এফটিডব্লিউ! জটিল পরীক্ষার ফাইলগুলি লেখার পরে, এটির জন্য ঝুলিয়ে রাখা নিষ্ঠুর।
ব্র্যাড রিচার্ডসন

21

অ্যাঙ্গুয়ালার ক্লিপ using ব্যবহার করে আমারও একই সমস্যা ছিল, আমি সঠিক ট্যাগের বার্তা পেতে এই ট্যাগটি ব্যবহার করেছি:

ng test --source-map=false

হয়তো এটি কাউকে সাহায্য করবে :)।


8

আমার ক্ষেত্রে একটি মক ডেটা সমস্যা ছিল এবং এর ক্ষেত্রে Arrayআমি stringমক থেকে ফিরে আসছিলাম।

someApi = fixture.debugElement.injector.get(SomeApi);
spyOn(someApi, 'someMethod')
  .and.returnValue(Observable.of('this is not a string but array'));

ত্রুটি বার্তাটি সত্যই বিভ্রান্ত করছে এবং প্রকৃত ত্রুটিটি বলছিল না। চলমান ng test --source=falseসঠিক ত্রুটি এবং লাইনটি নির্দেশ করেছে এবং এটি দ্রুত সমাধান করতে আমাকে সহায়তা করেছে।

অনেক সময় এটি ঘটে যখন আপনি মক ডেটা অসম্পূর্ণ বা ভুল হয়।


7

হয় আপনি নির্ধারণ করতে পারেন ইনপুট () এ ডিফল্ট মান সম্পত্তি component.ts

@Input() tableColumns: Array<any> = [];  
@Input() pageObj: any = '';

অথবা

নিম্নলিখিত উপায়ে আপনার উপাদান. spec.ts ফাইলটি পরিবর্তন করুন ,

beforeEach(() => {  
   fixture = TestBed.createComponent(MyComponent);  
   component = fixture.componentInstance;  
   component.tableColumns = [];  
   component.pageObj = '';  
   fixture.detectChanges();  
});

4

উপরে যেমন প্রস্তাবিত হয়েছে: https://stackoverflow.com/a/45570571/7085047 আমার সমস্যাটি ছিল আমার ngOnInit। আমি একটি মক সোয়াগার-উত্পাদিত REST নিয়ামক প্রক্সি কল করছিলাম। এটি নালায় ফিরছিল, এবং আমি সেই শূন্যটিতে সাবস্ক্রাইব করছিলাম, যা কাজ করে না ...

ত্রুটি ফিরে এসেছিল:

Failed to load ng:///DynamicTestModule/MockNodeDashboardComponent_Host.ngfactory.js: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

Ts-mockito ব্যবহার করে আমি সমস্যাটি সমাধান করেছি: https://github.com/NagRock/ts-mockito

আমি এর মতো একটি মক উদাহরণ তৈরি করতে কোড যুক্ত করেছি:

import { mock, instance, when } from 'ts-mockito';
import { Observable } from 'rxjs/Observable';
import { Observer } from 'rxjs/Observer';
import { MockScenario } from './vcmts-api-client/model/MockScenario';

const MockVcmtsnodemockresourceApi: VcmtsnodemockresourceApi = mock(VcmtsnodemockresourceApi);
const obs = Observable.create((observer: Observer<MockScenario[]>) => {
  observer.next(new Array<MockScenario>());
  observer.complete();
});
when(MockVcmtsnodemockresourceApi.getMockScenariosUsingGET()).thenReturn(obs);
const instanceMockVcmtsnodemockresourceApi: VcmtsnodemockresourceApi = instance(MockVcmtsnodemockresourceApi);

এবং তারপরে পরীক্ষার সরবরাহকারী অ্যারেতে উদাহরণটি যুক্ত করে:

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      ...
      providers: [
        ...
        { provide: VcmtsnodemockresourceApi, useValue: instanceMockVcmtsnodemockresourceApi },
        ...
      ]        
    }).compileComponents();
  }));

আপনার যদি নতুন প্রশ্ন থাকে তবে দয়া করে প্রশ্ন জিজ্ঞাসা বোতামটি ক্লিক করে এটি জিজ্ঞাসা করুন । যদি এই প্রসঙ্গে সরবরাহ করতে সহায়তা করে তবে এই প্রশ্নের একটি লিঙ্ক অন্তর্ভুক্ত করুন। - পর্যালোচনা থেকে
অ্যান্টন বালানিয়ুক

আমার লক্ষণটি ওপি'র মতোই বলে মনে হয়েছিল, তাই আমি ভেবেছিলাম যে লোকেরা আমার জন্য কাজটি করতে পারে তার
দাতুম গীক

3

এটি প্রকৃত পরীক্ষার ত্রুটিটি লুকিয়ে থাকা ক্রোমের সাথে সম্পর্কিত হতে পারে। পরীক্ষার ক্ষেত্রটি এমন কিছু মক এইচটিপি ফ্যাক্টরিটিকে বিভ্রান্ত করবে যে এটি লোড করতে পারে না এবং সেই কারণেই এটি ত্রুটি হিসাবে প্রতিবেদন করবে। সম্ভবত ত্রুটিটি ngOnInit অঞ্চলের আশেপাশে থাকবে যেখানে কোনও বস্তু রয়েছে বলে, সাব-অবজেক্টের প্রত্যাশা করে এবং সেগুলি সংজ্ঞায়িত করা হয় না।

ত্রুটিটির তলদেশে পৌঁছানোর জন্য, অস্থায়ীভাবে ফ্যান্টমজেএসে স্যুইচ করুন যা এই আরম্ভের ত্রুটি থেকে কম ভুগছে এবং আশা করি এটি আপনার কাছে আসল ত্রুটিটি রিপোর্ট করবে। বেশ কয়েকটি উপলক্ষ্যে আমি দেখেছি যেখানে সূচনাতে প্রত্যাশিত কোনও বস্তু সম্পূর্ণ হয়নি। অর্থাৎ,

    fixture = TestBed.createComponent(MyComponent);
    component = fixture.componentInstance;

    component.object = {}
// should be:
    component.object = {"innerObjectThatIsNeeded" : []}

অবজেক্টটি সংশোধন করে ফ্যান্টমজেএস সম্পূর্ণ করার অনুমতি দেয় এবং ক্রোমকেও পরবর্তী পরীক্ষায় যেতে দেয়।

এর বাইরে আমি Chrome থেকে সমস্যাটি সরিয়ে দেওয়ার কোনও সমাধান দেখিনি। তেমনি চেষ্টা করুন এবং ত্রুটিটি অনুসরণ করার জন্য "কোডটি সরান, ত্রুটি না হওয়া পর্যন্ত" নীতি গ্রহণ করুন adop

আপডেট: নোট করুন এখন এটি বেশ পুরানো উত্তর, আমি আর ফ্যান্টমজেএস ব্যবহার করার পরামর্শ দেব না (ইওএল)। ব্রাউজার পরীক্ষার রিপোর্টিং অনেক উন্নত হয়েছে এবং যদি ক্রোম আপনাকে শোক দিচ্ছে তবে ফায়ারফক্স চেষ্টা করুন, যা আজকাল খুব ভাল পরীক্ষাও চালায়।


2

আমারও এই ত্রুটি ছিল, যা সত্য বলা যায় তা মোটামুটি কথাবার্তা নয়।

এটি এইচটিটিপি কল ট্রট আমার পরিষেবাগুলির সাথে সম্পর্কিত ছিল

আমি 2 পদ্ধতির সাথে মাই সার্ভিস.ট ব্যবহার করি

get();
getAll();

আমি এই পরিষেবাটি উপহাস করছি: mockMyService.ts

ত্রুটিটি এখানে ছিল কারণ আমার উপাদানটি getAll () পদ্ধতিটি ব্যবহার করছিল যা আমি মকমাওয়াই সার্ভিসে প্রয়োগ করতে ভুলে গিয়েছিলাম, সুতরাং আমি কেবল পদ্ধতিটি যুক্ত করেছি:

private mockObjects = [
{
  'id': '1',
  'champ1': 'TECH',
  'champ2': 2,
  'champ3': 'Data bidon'
},
{
  'id': '2',
  'champ1': 'TECH',
  'champ2': 2,
  'champ3': 'Data au pif'
},
{
  'id': '3',
  'champ1': 'FUNC',
  'champ2': 3,
  'champ3': 'Data quelconque'
},
 ];

getAll(): Observable<any> {
  return Observable.of(this.mockObjects);
}

ত্রুটি চলে গেছে :)


2

আমি একই সমস্যার মুখোমুখি হয়েছি এবং আমি খুঁজে পেয়েছি যে এটির সমাধানের জন্য আপনাকে পদ্ধতিতে উপাদানগুলির জন্য নিজের ইনপুটগুলি সেটআপ করতে হবে আগে নীচের প্রতিটি চিত্র:

beforeEach(() => {
    fixture = TestBed.createComponent(CellComponent );
    cmp = fixture.debugElement.componentInstance;
    cmp.dep = '';
    cmp.embedded = false;
    cmp.dashboard = false;
    fixture.detectChanges();
});

এটি অবশ্যই আপনার সমস্যা সমাধান করবে।


1

আমার ক্ষেত্রে অপরাধী ছিল observable.timeout(x).retry(y) পরিষেবা ক্লাস স্তরের প্রত্যাবর্তনযোগ্য পর্যবেক্ষনে কোথাও প্রয়োগ করা , তারপরে আবার সেই উপাদানটিতে যা সেই পরিষেবাটি ব্যবহার করছে in

কৌণিক-ক্লিপ 1.4 অবধি ব্রাউজারে সবকিছু সঠিকভাবে কাজ করে। তারপরে কর্ম পরীক্ষার সময় ব্যর্থ হওয়া শুরু হয়েছিল (এরকম নির্বোধ ত্রুটি সহ)। সমাধান অবশ্যই এই সময়সীমার / পুনরায় চেষ্টা অপারেটরদের পরিপাটি করা ছিল।


1

আমার জন্য এই বার্তাটি উপস্থিত হয় যখন আমার পরীক্ষাগুলিতে কোনও মক মিথ্যা হয়: সাধারণত আপনি আপনার পরীক্ষার বুটস্ট্র্যাপে মক সার্ভিস সরবরাহ করেন। যদি আপনার উপহাস অসম্পূর্ণ বা মিথ্যা হয়, তবে কৌনিকটি এই বোকা ত্রুটিটি ফিরিয়ে দেয়।

আমার মামলার আরও তথ্য এখানে


0

আমি যা করবো তা হ'ল:

কনজোল.লগ () গুলি, এনজিওনিন্ট () এর লাইনের পরে লাইন যুক্ত করুন এবং এটি কতটা দূরে যায় তা সন্ধান করুন, তারপরে কোন রেখাটি অতিক্রম করবে তা পরীক্ষা করুন।

উদা:

ngOnInit() {
    this.route.paramMap
        .switchMap(params => {
            this.busy = true;
            this.updateErrors(null);

            console.log(params);

            **const id = params.get('id');**
            console.log(id);

            if (id === 'new') {
                this.editMode = true;
                return Observable.of(GroupComponent.newGroup());
            }
            return this.apiService.getGroup(id);
        })
    }

এই পোস্টে একই ত্রুটি সহ এটি আমার পরীক্ষায় ব্যর্থ হয়েছিল। উপরে প্রদর্শিত হিসাবে, আমি দুটি কনসোল.লগ ছিল। প্রথমজন গৌরব দিয়েছিল, কিন্তু দ্বিতীয়টি পাস করেনি। সুতরাং আমি বুঝতে পেরেছি যে বিষয়টি লাইন কনট আইডি = প্যারাম.জেট ('আইডি') এ রয়েছে; এবং আমি এটি স্থির করেছি।

আশা করি এটি কারও সাহায্য করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.