Как имитировать соединение с клиентом ws с помощью jest / энзима - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь выполнить модульное тестирование обработки сообщений клиента websocket для компонента. Этот компонент подписывается на темы с указанием обработчика c для каждой топи c. Я пытаюсь убедиться, что когда пришло «обновление», вызывается обработчик и сообщение обрабатывается соответствующим образом.

Я пробовал jest-websocket-mock, но не могу отправить сообщение для топи c, поэтому я не могу проверить, вызывается ли этот обработчик или нет. Нужно ли мне делать что-то еще, или мой подход к модульному тестированию этого компонента был неправильным?

Ниже представлен компонент, который я тестирую, и тестовый файл.

Home. js

....
import WSConn from '.../components/WsConn'; // this component handle the actual logic setting up the connection to the mqtt broker using Paho javascript

class Home extends PureComponent {
   constructor(){
      ....
      this.wsRef = React.createRef()
   }

   componentDidMount(){
      this.fetchPageData().then(() => {
          WSConn.connect();
          WSConn.subscribe('topicName', topicHandler);
      });
   }

   async fetchPageData() {} // fetch from api

   topicHandler(message) {
       .... // process the message
   }

   render(){
      return (
         <Fragment>
            <WSConn ref={this.wsRef} />

            ... //other contents
         </Fragment>
      )
   }
}

Home.spe c. js

....

let server;

beforeEach(() => {
  // create a WS instance, listening on port 1234 on localhost
  server = new WS(SOCKET_URL);
});

afterEach(() => {
  server.close();
});


   it('should trigger topic handler', (done) => {
      expect.assertions(2);

      const spyHandler = jest.fn(Home.prototype, 'topicHandler');

      const wrapper = mount(<Home />);

      setTimeout(() => {
        server.send({
          destinationName: 'topicName',
          payloadString: 'hello',
        });

        expect(spyHandler).toHaveBeenCalledTimes(1); // always return 0

        done();
      }, 0);
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...