我正在为一个调用模块的函数编写一个单元测试,作为调用它的副作用的一部分:
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模块上调用一个类级方法。
我编写测试的考虑和原因是,在将来,我可能会通过删除或注释行等方式,意外地删除与提交有关的功能。
发布于 2018-04-15 18:41:51
我会说1:不。这就是在测试中保持低复杂度。您只想在方法中进行测试(无论您想测试什么),其余的都应该被忽略。您可以做的是验证您的方法调用了什么touch_commit --应该是一个很好的模拟框架的一部分。这些是我的5美分,抱歉地说,我不熟悉凤凰/灵丹妙药,所以我不能给你任何工作的例子。就像验证方法一样,我想的就是Mockito或Moq。
https://stackoverflow.com/questions/49838182
复制相似问题