首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExUnit模拟被混入它们的并发性中(异步: false不工作?)

ExUnit模拟被混入它们的并发性中(异步: false不工作?)
EN

Stack Overflow用户
提问于 2016-02-05 02:46:10
回答 1查看 494关注 0票数 2

在执行ExUnit.start时,在每种情况下,我都会像下面这样通过meck准备模拟

代码语言:javascript
复制
defmodule MyModule.FooTest do
    use ExUnit.Case, async: false # explicitly sync
    import :meck

    alias MyModule.Foo
    alias MyModule.Baz # to be mocked

    test "call_baz" do
        expect(Baz, :some_async_method, [
            {[], :meck.val(Task.async(fn -> %{"name" => "otiai10"} end)},
        ])

        assert Foo.call_baz() == %{"name" => "otiai10"}
    end
end

但是它返回{"name" => "otiai200"},因为Baz.some_async_method是由模拟的另一个带有返回{"name" => "otiai200"}的测试

这当然是在另一个测试用例中模仿的响应。(在他们的async: false语句中也给了他们use选项)

有什么问题吗,async: false选项不起作用?还是不推荐嘲笑Task.async?还是我犯了什么基本的错误?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-05 08:25:29

Meck需要显式卸载模拟。因此,在运行此测试时,另一个并行运行的测试可能会更新期望。尝试使用模拟将:meck.unload(Baz)添加到每个测试中。

我不太熟悉Elixir如何决定运行它的测试套件(可能是并行的,即使它们在内部是异步的?)所以这可能会影响到。由于Meck正在修改全局模块命名空间,因此不应该从不同的测试用例并行地模拟同一个模块。

我建议尝试使用Meck包装器模拟来验证这是否给出了相同的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35215474

复制
相关文章

相似问题

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