我正在为一个调用模块的函数编写单元测试,作为调用它的副作用的一部分:
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
方法的效果。如果我使用的是Rails / Ruby / Rspec,那么我会期望在HeimdallrCommits
模块上调用类级方法。
我对编写测试的关注和理由是,将来我可能会通过删除或注释掉行等而意外删除触及提交的功能。
答案 0 :(得分:0)
我会说1:不。那就是在测试中保持低复杂性。你只想在一个方法中测试(无论你想测试什么),其余部分应该被模拟忽略。你可以做的是验证你的方法调用了touch_commit - 应该是一个好的模拟框架的一部分。这是我的5美分,很遗憾地说我不熟悉凤凰/灵药,所以我不能给你任何有用的例子。就像验证方法一样,我正在考虑Mockito或Moq ..