- make-mock-backendprocedure
Returns two values: a backend alist (compatible with db/backend) and a spy procedure for inspecting and controlling the mock.
(import orm-db orm-test) (receive (backend spy) (make-mock-backend) (db/backend backend) (db/path "ignored") (db/connect) ;; Configure responses (spy 'on-query (list (vector '((id . 1) (name . "Alice"))))) (users/all) ; => #(((id . 1) (name . "Alice"))) (spy 'queries)) ; => (("SELECT ..." ()))
The spy procedure responds to these messages:
- (spy 'queries) — list of (sql params) pairs from all queries
- (spy 'executions) — list of (sql params out-key) from all executions
- (spy 'on-query responses-or-proc) — set query responses: a list (consumed in order, last item repeats) or a (lambda (sql params) ...)
- (spy 'on-execute responses-or-proc) — set execute responses: a list or a (lambda (sql params out-key) ...)
- (spy 'reset!) — clear recorded queries and executions
;; Static list of responses (last item repeats forever) (spy 'on-query (list (vector '((id . 1) (name . "Alice"))) ; first query (vector))) ; all subsequent queries ;; Dynamic responses (spy 'on-query (lambda (sql params) (if (string-contains sql "users") (vector '((id . 1) (name . "Alice"))) (vector))))