首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在midje中模拟函数调用

在midje中模拟函数调用
EN

Stack Overflow用户
提问于 2016-10-14 15:24:19
回答 1查看 421关注 0票数 1

假设我有一个功能

代码语言:javascript
复制
(defn extenal_api_fn [stuff]
   ... do things....
)

(defn register_user [stuff]
  (external_api_fn stuff))

然后是个测试

代码语言:javascript
复制
(def stuff1
  {:user_id 123 })

(def stuff2
  {:user_id 234})

(background (external_api_fn stuff1) => true
            (with-redefs [external_api_fn (fn [data] (println "mocked function"))]
            (register_user stuff1) => true)
            (register_user stuff2) => true)

(facts "stuff goes here"
  (fact "user that registers correctly
    (= 1 1) => truthy)
  (fact "user that has a registration failure"
    (= 1 2) => falsy))

这不符合

代码语言:javascript
复制
"you never said #'external_api_fn" would be called with these arguments:
    contents of stuff1

为了模拟内部事务失败,对此函数调用(仅在某些情况下)进行存根是一个很好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-14 16:59:45

你可以用Midje的provided

代码语言:javascript
复制
(fact
  (register_user stuff1) => :registered
  (provided
    (extenal_api_fn stuff1) => :registered))

(fact
  (register_user stuff2) => :error
  (provided
    (external_api_fn stuff2) => :error))

您还可以通过使用anything代替函数参数来存根函数以返回值,而不管输入参数如何:

代码语言:javascript
复制
(fact
  (register_user stuff2) => :error
  (provided
    (external_api_fn anything) => :error))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40046759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档