【发布时间】:2018-04-16 02:58:34
【问题描述】:
我正在为调用模块的函数编写单元测试,作为调用它的副作用的一部分:
defmodule HeimdallrWeb.VerifyController do
use HeimdallrWeb, :controller
def verify(conn, _params) do
[forwarded_host | _tail] = get_req_header(conn, "x-forwarded-host")
case is_preview_page?(forwarded_host) do
{:ok, false} ->
conn |> send_resp(200, "")
{:ok, %Heimdallr.Commits.Commit{} = commit} ->
Heimdallr.Commits.touch_commit(commit)
conn |> send_resp(200, "")
{:not_found, _reason} ->
conn |> send_resp(200, "")
end
end
end
副作用是从Heimdallr.Commits.touch_commit(commit)这一行触发的。
关于这个的几个问题:
- 我的单元测试是否应该与测试
touch_commit方法的效果有关。 - 如果是这样,我是否应该考虑传入一个通用的“触摸”函数来验证方法以使其更易于测试。由于 Phoenix / Elixirs 路由系统的性质,这可能很困难,我没有调查过。
如果我使用的是 Rails / Ruby / Rspec,那么我会期望在 HeimdallrCommits 模块上调用类级别的方法。
我担心和编写测试的原因是,将来我可能会通过删除或注释掉该行等方式意外删除涉及提交的功能。
【问题讨论】:
标签: unit-testing elixir phoenix-framework