मैं angularx-सामाजिक-लॉगिन npm पैकेज का मज़ाक उड़ाने की कोशिश कर रहा हूँ। मैं बस इतना चाहता हूं कि डिफ़ॉल्ट को पास करने के लिए टेस्ट बनाया जाना चाहिए। मेरे परीक्षण युक्ति में मेरे पास है:

  let component: Component;
  let fixture: ComponentFixture<Component>;
  let spy;

  beforeEach(async(() => {
    spy = jasmine.createSpyObj('SocialAuthService', ['signIn', 'signOut'], ['authState']);
    TestBed.configureTestingModule({
      declarations: [
        Component
      ],
      providers: [
        { provide: SocialAuthService, useValue: spy }
      ]
    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(Component);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });

इस कोड के साथ मुझे त्रुटि मिलती है कि संपत्ति अपरिभाषित की सदस्यता नहीं पढ़ सकती है। जिसकी उम्मीद है क्योंकि मैंने ऑथस्टेट के लिए सदस्यता सेट नहीं की है, जैसा कि मेरे घटक में मेरे पास है:

this.socialAuthService.authState;

उपरोक्त रिटर्न देखने योग्य है। हालाँकि जब मैं कोड की इस पंक्ति को पहले प्रत्येक से पहले जोड़ता हूँ:

spy.authState.and.returnValue(of());

यह कहता है कि संपत्ति और अपरिभाषित नहीं पढ़ सकता है। ऑनलाइन कुछ शोध करने के बाद मैं देख सकता हूं कि स्पाईऑनप्रॉपर्टी का उपयोग करने के लिए बहुत सारे सुझाव हैं, हालांकि जब मैं spyOnProperty(spy, 'authState', 'get'); जैसे कुछ का उपयोग करता हूं तो मुझे त्रुटि मिलती है Failed: : authState को कॉन्फ़िगर करने योग्य घोषित नहीं किया जाता है। मुझे सच में यकीन नहीं है कि इस मुद्दे के साथ कैसे आगे बढ़ना है, किसी भी मदद की बहुत सराहना की जाएगी।

0
Remibo90 28 सितंबर 2020, 20:39

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि आप jasmine.createSpyObj का गलत इस्तेमाल कर रहे हैं। इसमें केवल 2 तर्क होते हैं, तीन नहीं।

पहला तर्क जासूस के लिए एक स्ट्रिंग नाम है और दूसरा तर्क सार्वजनिक तरीकों की एक सरणी है जिसका आप मजाक बनाना चाहते हैं। यह देखते हुए कि आपके पास this.socialAuthService.getAuthState() है, आपको इस दूसरे तर्क में getAuthState जोड़ना होगा।

ये कोशिश करें:

 let component: Component;
  let fixture: ComponentFixture<Component>;
  let spy;

  beforeEach(async(() => {
    // add all other public properties required into the second argument inside of the array ** in this case remove it since you don't need it
    spy = jasmine.createSpyObj('SocialAuthService', []);
    TestBed.configureTestingModule({
      declarations: [
        Component
      ],
      providers: [
        { provide: SocialAuthService, useValue: spy }
      ]
    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(HeaderComponent);
    component = fixture.componentInstance;
    // I am not sure when you require the value but let's assume you need it in the ngOnInit
   // so we have to put it here
    // spy.getAuthState.and.returnValue(of(null)); // now we are mocking the return value of getAuthState, ** comment out this line, you don't need it
    spy.authState = of(null); // ** mock it to what you would like here
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
0
AliF50 30 सितंबर 2020, 16:02