我正在使用朋友保护我的网络应用程序中的某些页面,到目前为止工作正常。我遇到了我的测试代码问题:我似乎无法解决身份验证机制或模拟朋友的授权调用。到目前为止我尝试过的事情:
第一种方法似乎不起作用,因为我不确定我需要添加到请求中,第二种似乎不起作用,因为midje似乎没有看到对朋友的呼叫/完全授权。相关事实如下:
(fact "The users page can be fetched successfully"
(let [req (request :get "/user")
response (app req)]
(:body response) => #"(some results)"
(provided
(friend/authorized? anything anything) => true)))
这是相应的(正在运行的)compojure路线:
(GET "/user" [] (friend/authorize #{::admin} users))
我基本上在事实中宏观扩展了friend/authorize
电话,但由于授权,我仍然得到两个失败的事实。在添加授权之前测试成功运行,因此它确实是我需要解决的朋友授权部分。
有没有最佳实践可以解决这个问题?
答案 0 :(得分:2)
事实证明,我对Midje的provided
功能过于乐观。假设在可检查过程中调用了模拟代码,它与一个可检查项紧密相关。即以下是我的工作:
(fact "The users page can be fetched successfully"
(app (request :get "/user")) => (contains {:status 200})
(provided
(friend/authorized? anything anything) => true))
答案 1 :(得分:0)
如果authorized?
完全被调用,这实际上取决于你朋友的auth工作流程。
另外,我永远不会让midje
做运行时模拟,所以我通常使用with-redefs模拟函数
这些方面的内容对您有用:
(fact "The users page can be fetched successfully"
(let [req (request :get "/user")
response (app req)]
(with-redefs [friend/authorize (fn [roles f] f)]
(:body response)) => #"(some results)"))