Skip to content

WebSocket Examples

Brandon Correa edited this page May 17, 2024 · 1 revision

In Your Tests

(ns acme.mimic
  (:require [c3kit.wire.js :as wjs]))

(def connected? (atom false))
(def messages (atom []))
(defn connect! []
  (let [ws (js/WebSocket. "ws://localhost:8080")]
    (wjs/add-listener ws "open" #(reset! connected? true))
    (wjs/add-listener ws "close" #(reset! connected? false))
    (wjs/add-listener ws "message" #(swap! messages conj (wjs/o-get % "data")))))
(ns acme.mimic-spec
  (:require [acme.mimic :as sut]
            [bwa.mimic.server :as server]
            [bwa.mimic.spec-helper :as mimic-helper]
            [c3kit.wire.js :as wjs]
            [speclj.core :refer-macros [describe it should= should-not should-be should]]))

(describe "Mimic"
  (mimic-helper/with-memory-websockets)

  (it "listens for messages"
    (should-be empty? (server/connections))
    (sut/connect!)
    (let [[ws :as connections] (server/connections)]
      (should= 1 (count connections))
      (should= "ws://localhost:8080/" (wjs/o-get ws "url"))

      (should-not @sut/connected?)
      (server/open ws)
      (should @sut/connected?)

      (server/send ws "first payload")
      (should= ["first payload"] @sut/messages)
      (server/send ws "second payload")
      (should= ["first payload" "second payload"] @sut/messages)

      (server/close ws)
      (should-not @sut/connected?)))
  )

In Your App

(ns acme.main
  (:require [bwa.mimic.memory-server :as mem-server]
            [bwa.mimic.memory-websocket :as mem-ws]
            [bwa.mimic.server :as server]))

(defn -main []
  ; redefine the WebSocket constructor
  (set! js/WebSocket mem-ws/->MemSocket)

  ; set your browser's repl options
  (set! js/Server server/repl-options)

  ; Configure your server implementation
  (reset! server/impl (mem-server/->MemServer))
  )
Clone this wiki locally