在两次测试之间关闭/清除模拟套接字

问题描述 投票:0回答:1

我正在使用mock-socket模拟websockets调用。

我有一个测试正在工作,但是它仅适用于一个测试,然后它说模拟服务器已经在监听该URL:

describe('mock socket method 1', () => {
  let mockSocket;
  let mockServer;
  beforeEach(() => {
    cy.visit('/', {
      onBeforeLoad(win: Window): void {
        // @ts-ignore
        cy.stub(win, 'WebSocket', url => {
          mockServer = new Server(url).on('connection', socket => {
            console.log('mock socket connected');
            mockSocket = socket;
          });
          if (!mockServer) return new WebSocket(url);
        });
      },
    });
  });

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

  it('gets a message', () => {
    const object = _createSettingsApiPutPayload(defaultSettingsState)
    mockSocket.send(JSON.stringify(object));
    cy.contains('Motion threshold')
  });
  it('gets a message', () => {
    const object = _createSettingsApiPutPayload(defaultSettingsState)
    mockSocket.send(JSON.stringify(object));
    cy.contains('Motion threshold')
  });
});

如果将方法更改为before()而不是beforeEach,则可以使用,但是每次测试我都无法获得一个新鲜的环境。如您所见,我在mockSocket.close()中尝试了afterEach(),但这不起作用。我已经尝试过cy.reload(),但是会出现CORS错误!

错误似乎引发于

> 15 | ReactDOM.render(
  16 |   <AppWrapper/>,
  17 |   document.getElementById('root'),
  18 | );

[AppWrapper是包装在redux的AppContainer中的ProviderAppContainerApp连接到redux,这里是App

class App extends Component<AppProps> {

  settingsSubscription: W3CWebSocket;

  componentDidMount(): void {
    // subscribe to websockets
    this.settingsSubscription = this.subscribeToSettings(urls.SETTINGS_WS);

  }

  /**
   * Sets up the websockets subscription to the settings.
   * @param url the url of the websocket server
   * @return the subscription object
   */
  subscribeToSettings(url: string): W3CWebSocket {
    let settingsSubscription = new W3CWebSocket(url);
    settingsSubscription.onopen = () => console.log('WebSocket Client Connected (settings)');
    settingsSubscription.onclose = () => console.log('WebSocket Client Disconnected (settings)');
    settingsSubscription.onmessage = (message: MessageEvent) => this.handleSettingsMessage(message);
    return settingsSubscription;
  }
...
}
websocket cypress
1个回答
0
投票

您是否尝试过在afterEach内停止模拟服务器?尝试添加afterEach.stop()并再次尝试。

© www.soinside.com 2019 - 2024. All rights reserved.