首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExUnit模拟序列

ExUnit模拟序列
EN

Stack Overflow用户
提问于 2016-08-04 23:13:01
回答 1查看 420关注 0票数 1

有没有可能用meck模拟一系列返回值,就像ExUnit在Erlang语言中提供此功能一样?

代码语言:javascript
复制
...
meck:new(my_module),
meck:sequence(my_module, method, 1, [Response1, Response2]),
meck:unload(module),
...

如果没有,是否有可能在同一个单元测试ExUnit Elixir模块中成功地组合meck和mock?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-04 23:57:14

mock.ex中没有提到:meck.sequence,所以我猜这还不受支持。

只要是在Mock.with_mock调用的外部,直接调用:meck函数应该没问题,而且要确保在调用完成后调用:meck.unload/1。(而且你使用async: false,正如模拟已经要求的那样。)即使在同一个测试中,这也应该没问题。

代码语言:javascript
复制
test "the truth" do
  url = "http://www.google.com"

  :meck.new(HTTPoison)
  :meck.sequence(HTTPoison, :get!, 1, [%{body: "foo"}, %{body: "bar"}])
  assert HTTPoison.get!(url).body == "foo"
  assert HTTPoison.get!(url).body == "bar"
  assert HTTPoison.get!(url).body == "bar"
  :meck.unload(HTTPoison)

  assert HTTPoison.get!(url).body =~ "HTML"

  with_mock HTTPoison, [get!: fn(_url) -> %{body: "baz"} end] do
    assert HTTPoison.get!(url).body == "baz"
  end

  assert HTTPoison.get!(url).body =~ "HTML"
end

演示:

代码语言:javascript
复制
$ mix test
.

Finished in 0.2 seconds
1 test, 0 failures
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38771207

复制
相关文章

相似问题

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