目前,没有方法可以在测试之外强制函数{{fdef}}验证,也不能通过动态变量覆盖。可以使用以下方式在函数中强制进行验证:a)使用{{:pre}}钩子或b)手动调用{{s/conform}} / {{s/valid?}},但这些不会对函数文档做出贡献。有许多函数始终验证输入的使用场景,例如在应用启动时配置组件,这种情况只需要做一次,因为性能代价不大,正确性更重要。
Schema有{{:always-validate}}元数据用于这种情况
(require '[schema.core :as s])
(s/defn ^:always-validate interceptor-x
[opts :- {:string? s/Bool}])
(interceptor-x {})
;语法错误编译时出错(ExceptionInfo)在(test.cljc:150:1)。
;interceptor-x的输入与模式不匹配
;
(missing-required-key {:string? missing-required-key} opts)