返回

Elixir & GraphQL 集成:怎样正确进行测试

前端

在第一部分中,我们完成了 Elixir 和 GraphQL 集成的所有代码部分。为了确保代码的正确性和可靠性,我们需要对不同层次进行测试。

单元测试

单元测试是测试代码中最小的独立单元(通常是一个函数或一个类)是否按预期工作。在 Elixir 中,我们可以使用 ExUnit 来编写单元测试。

以下是一个简单的单元测试示例,测试 User 模型的 valid? 函数是否正确验证用户数据:

defmodule MyApp.UserTest do
  use ExUnit.Case

  test "valid? function should return true for valid data" do
    assert User.valid?(%{name: "John Doe", email: "johndoe@example.com"}) == true
  end

  test "valid? function should return false for invalid data" do
    assert User.valid?(%{name: "", email: "johndoe@example.com"}) == false
  end
end

集成测试

集成测试是测试多个组件或模块是否按预期协同工作。在 Elixir 中,我们可以使用 Machinery 来编写集成测试。

以下是一个简单的集成测试示例,测试 UserController 是否正确处理用户创建请求:

defmodule MyApp.UserControllerTest do
  use Machinery.Case

  test "create action should create a new user" do
    post "/users", %{name: "John Doe", email: "johndoe@example.com"}

    assert_response 201
    assert_json_body %{id: 1, name: "John Doe", email: "johndoe@example.com"}
  end
end

端到端测试

端到端测试是测试整个应用程序是否按预期工作。在 Elixir 中,我们可以使用 Hound 来编写端到端测试。

以下是一个简单的端到端测试示例,测试用户是否能够登录应用程序:

defmodule MyApp.E2ETest do
  use Hound.Case

  test "user should be able to log in" do
    visit "/"
    fill_in "Email", with: "johndoe@example.com"
    fill_in "Password", with: "secret"
    click "Log in"

    assert_current_path "/dashboard"
  end
end

总结

通过这三种测试,我们可以确保 Elixir 和 GraphQL 集成中的代码总是正常工作。这将有助于我们在开发和维护应用程序时提高信心。