0

我正在使用朋友来保护我的 Web 应用程序中的某些页面,到目前为止它运行良好。不过,我的测试代码遇到了问题:我似乎无法绕过身份验证机制或模拟朋友的授权调用。到目前为止我尝试过的事情:

  • 使用包含身份验证信息的映射包装请求
  • 使用 midje/provided 模拟给朋友/授权的电话

第一种方法似乎不起作用,因为我不确定我需要向请求中添加什么,而第二种方法似乎不起作用,因为 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)))

这是相应的(正在运行的)组合路由:

(GET "/user" [] (friend/authorize #{::admin} users))

我基本上friend/authorize在 midje 事实中对呼叫进行了宏扩展,但由于授权,我仍然得到两个 FAILS。在添加授权之前测试成功,所以这确实是我需要解决的朋友授权部分。

有没有解决这个问题的最佳实践?

4

2 回答 2

2

原来我对 Midje 的provided功能过于乐观了。它与一个可检查项密切相关,假设在可检查项的过程中调用了模拟代码。即以下对我有用:

(fact "The users page can be fetched successfully" 
  (app (request :get "/user")) => (contains {:status 200}) 
  (provided 
     (friend/authorized? anything anything) => true))
于 2014-01-12T14:51:00.363 回答
0

这真的取决于你朋友的身份验证工作流程是否authorized?会被调用。

另外,我从来没有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)"))
于 2014-01-10T13:08:56.033 回答