angular कांच में यूनिट परीक्षण सॉकेट



unit-testing typescript (1)

आपका द्वितीय दृष्टिकोण सही है क्योंकि नकली सर्वर एक वास्तविक है, इसलिए आपको सेटिंग को समय-सीमा बढ़ाने की आवश्यकता है

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; (मूल्य समायोजित किया जाना है)

वर्णन समारोह के अंदर कहीं भी।

यहां आप एक पूर्ण उदाहरण पा सकते हैं।

मैं अपने अनुप्रयोग में एक कोणीय सेवा इकाई परीक्षण करने की कोशिश कर रहा हूं, जो socket.io क्लाइंट बनाता है। मेरी सेवा कुछ इस तरह दिखती है:

export class SocketService {
  private name: string;
  private host: string = window.location.protocol + "//" + window.location.hostname + ":3000";
  socket: io.Socket;

  constructor() { }

  subscribeEvent(name: string): Observable<IJobResp> {
    this.setup(name);
    return new Observable(observer => {
      this.socket.on('job', val => observer.next(val))
    })
  }

  private setup(name: string) {
    this.name = name;
    let socketUrl = this.host + "/" + this.name;
    this.socket = io.connect(socketUrl);
  }
}

तो मेरी परीक्षा लिखने के लिए, मैं मॉक-सॉकेट लायब्रेरी का उपयोग कर एक नकली socket.io सर्वर स्थापित करने के लिए कर रहा हूँ। यह परीक्षण कैसा दिखता है:

describe('SocketService', () => {
  let socket;

  const mockServer = new Server('http://localhost:3000/');
  mockServer.on('connection', server => {
    mockServer.emit('job', 'test message 1');
  });

  (window as any).io = SocketIO;
  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [JobService]
    });
  });

  it('should xyz, inject([JobService], fakeAsync((service: JobService) => {
    service.subscribeEvent('/').subscribe(val => {
      expect(val).toEqual('test message 1');
    })
  })));
});

हालांकि, यह परीक्षण त्रुटि को फेंकता है:

त्रुटि: नकली async परीक्षण के भीतर XHRs नहीं बना सकते

अगर मेरे पास fakeAsync नहीं है, तो subscribe() से पहले subscribe() का परीक्षण किया जाता है।

मैं इसके आसपास कैसे पहुंचू?

अद्यतन करें:

मैंने कोशिश की है एक और तरीका async उदाहरण का उपयोग करना है

  it('should subscribe to dwnTime events', async(inject([JobService], (service: JobService) => {
    service.subscribeEvent('line/602').subscribe(val => {
      expect(val).toEqual('test 2');
    })
  })));

तब मुझे मिल रहा है:

त्रुटि: समयबाह्य - आसिनक कॉलबैक को जस्मीन द्वारा निर्दिष्ट समय के भीतर लागू नहीं किया गया था। DEFAULT_TIMEOUT_INTERVAL।

यह समय की समस्या की तरह लग रहा है, लेकिन मुझे अभी भी यकीन नहीं है क्यों?





jasmine