老实讲,我不大喜欢写测试。
但我还是得说,测试非常重要。它们是我们修改代码的灯塔 - 没有它们,我们很可能在修改代码时触礁。只是大部分项目活不过几个迭代 - 也就没多大必要写测试。
针对 User
,有两个要点需要测试:
-
from_id
必填 -
from_id
独一无二
在 test/tweet_bot/accounts/accounts_test.exs
文件中新增测试如下:
test/tweet_bot/accounts/accounts_test.exs
test "from_id should be required" do
changeset = User.changeset(%User{}, @valid_attrs |> Map.delete(:from_id))
refute changeset.valid?
assert %{from_id: ["can't be blank"]} = errors_on(changeset)
end
test "from_id should be unique" do
assert {:ok, _} = Accounts.create_user(@valid_attrs)
assert {:error, changeset} = Accounts.create_user(@valid_attrs)
assert %{from_id: ["has already been taken"]} = errors_on(changeset)
end
运行 mix test
:
$ mix test
.............
Finished in 0.2 seconds
13 tests, 0 failures
Randomized with seed 202657
是了,这就是测试驱动开发。我们的测试使用我们的接口,并验证接口行为的正确性。而我们的代码将根据测试结果不断调整,直到测试全部通过。