问题标签 [ex-unit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
745 浏览

elixir - 设置/拆卸在 elixir 中的每个测试之间设置表格?

我们试图在完全干净的 dets 环境中运行每个测试,每个测试都负责自己的设置。我们遇到了无法在测试之间完全删除目录的问题。

我们怎样才能重置dets?我们是否错误地认为清除整个目录并重新启动应用程序就足够了?在运行之间删除所有记录会更好吗?

认为:

  • async: true没有为任何测试设置。
  • dets是必须的
  • 大多数已回答的代码应该(如果可能的话)在长生不老药中,而不是在 erlang 中。

示例代码:

以及拆卸功能的胆量......

运行时的示例错误mix test是标准输出显示:

dets: file "dets/event_listener_stream_positions_test" not properly closed, repairing ...但不是错误,只是定期输出到控制台。

然后是测试中的实际失败: ** (File.Error) could not remove files and directories recursively from "dets": file already exists

0 投票
1 回答
386 浏览

elixir - Elixir List Comprehension 以创建新的结构列表

我对 Elixir 很陌生,并试图使用列表理解产生一个新的结构列表,而对于我的生活,我似乎无法做到这一点:

update_holdings接受另一个返回结构列表的函数。真正的实现调用数据库。此代码用于 ExUnit 测试,我试图返回一些存根数据。

似乎我在这里遇到了一些明显的错误。这是我运行时遇到的错误:mix test

那么我是否缺少模块导入,或者我如何使用列表理解生成结构列表?

0 投票
1 回答
317 浏览

elixir - 如何在 Channel 测试用例中读取新的 Phoenix 通道实例的状态?

我有以下凤凰频道处理传入的消息,广播它,然后更新频道实例的socket状态:

我试图handle_in("update", ...)通过这个测试用例测试函数的行为:

这里的问题是我找不到socket在测试用例中获取新更新状态的方法。

  • 模块中没有assert_socket_state函数,Phoenix.ChannelTest我找不到任何允许获取最新套接字状态的函数

  • 我考虑过定义 ahandle_call或 ahandle_info来返回套接字状态,但这意味着我必须获取通道的 pid 才能调用它们。

  • 我考虑过handle_in为此目的定义一个,但我不想在我的频道中放入一个将在生产中可用的自省工具。

推送消息后,如何 socket 在测试用例中获取更新?

0 投票
1 回答
467 浏览

elixir - 清理 ExUnit 测试示例

我在凤凰应用程序中有以下测试:

这些行在测试中重复:

知道如何让它更干燥吗?

0 投票
1 回答
737 浏览

authentication - Phoenix simple auth testing 登录用户

从这个简单的身份验证教程

我正在寻找在:login_required管道内测试应用程序的路由(它只是检查客户端是否调用了Guardian.Plug.sign_in(conn, user)

由于user_path show动作需要通过:login_required管道传输,我原以为要测试这条路线,我只需要编写以下内容:

Auth.login_by_email_and_pass(conn, user.email, @password)

然后将由此产生的管道conn传输到:

get conn, user_path(conn, :show, user.id)

并检查我是否获得了200状态码。

但我无法越过这Auth.login_by_email_and_pass(conn, email, password)条线并得到错误:

session not fetched, call fetch_session/2

我应该在哪里获取会话?

我努力了bypass_through(conn, [:browser, :with_session])

我会认为:browser管道调用fetch_session可以解决这个问题。

我也尝试过调用fetch_session之前和之后,但仍然得到同样的错误

0 投票
1 回答
1145 浏览

elixir - Ecto Sandbox 为现有流程使用已签出的连接

我有一个带有产品架构的 Phoenix测试应用程序。我有一个由主应用程序主管启动的 GenServer,它使用 handle_call 获取产品列表。

现在我想为这个 GenServer 写一个测试。

我试图在测试中做这样的事情

创建了 3 个产品,我可以使用 Repo.all(Product) 在测试中找到它们,但是运行MyGenServer.get_products()将返回一个空数组。

没有收到任何错误,只是返回一个空数组,好像不存在任何产品一样。

有没有办法让现有的 PID 使用结帐沙箱连接,并在 GenServer 进程中检索我的产品?

PS。我设法通过在测试设置中重新启动 GenServer 进程来运行测试,但我想知道是否有更“优雅”的方法来解决这个问题。

谢谢

0 投票
1 回答
159 浏览

elixir - 为什么 params_for 不通过变更集?

为什么 params_for 不通过变更集模型是主要问题。params_for 为 postal_code 生成 4 个数字和 2 个字母(可以是小写或大写)。如果 params_for 将通过变更集,则之后将全部大写。为什么这个测试目前失败了?

错误信息:Expected truthy, got nil

我有一个公司模型,带有这个变更集:

我有这个测试:

params_for 文档:https ://hexdocs.pm/ex_machina/ExMachina.Ecto.html#c:params_for/2

0 投票
1 回答
284 浏览

unit-testing - 有没有办法在 Elixir 中使用 Doctest 测试 IO 输出?

我完全可以编写一个“正常”的测试IO来捕获这个。

只想知道是否可以使用Doctest

一个例子是:

0 投票
1 回答
426 浏览

elixir - ExUnit 配置:在没有监督树的情况下开始测试

我试图在 Elixir 项目中模仿单独的单元和集成测试。对于单元测试,我不需要运行监督树,所以理想情况下我想使用模块标签之类的东西,@moduletag :integration即将需要运行应用程序的测试分组。我可以手动运行两次测试:

但我更喜欢一些集成的解决方案,这样我就必须运行mix test. 有一些选项,例如ExUnit.configure/start 的startautorun,但它们似乎不会产生任何影响。有什么建议么?

0 投票
1 回答
294 浏览

elixir - 在 Elixir 中如何模拟临时失败

我正在使用 Mox 模拟 HTTP 调用(使用 Tesla),如下所示:

我需要假服务器首先回复:401 token expired to /v1/system,我的模块发出/v1/token,然后重试/v1/system并成功。有什么好方法可以做到这一点?