我正在进行集成测试,但现在它无法编译。
listing_authors.test.exs
defmodule ListingAuthorsIntegrationTest do
use ExUnit.Case, async: true
use Plug.Test
alias BookcaseApi.Web.Router
alias BookcaseApi.Author
@opts Router.init([])
test 'listing authors' do
author = %Author{name: "Oscar Wilde"}
|> Repo.insert!
# Note: single quotes are for char lists.
# Note: double quotes are for strings.
conn = conn(:get, "/authors")
response = Router.call(conn, @opts)
assert response.status == 200
assert response.resp_body == author
end
end
author.ex
defmodule BookcaseApi.Author do
use BookcaseApi.Web, :model
schema "name" do
timestamps()
end
@doc """
Builds a changeset based on the `struct` and `params`.
"""
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [])
|> validate_required([])
end
end
stacktrace.txt
λ mix test test/integration/listing_authors.test.exs 0 < 18:39:12
** (CompileError) test/integration/listing_authors.test.exs:9: BookcaseApi.Author.__struct__/1 is undefined, cannot expand struct BookcaseApi.Author
(stdlib) lists.erl:1354: :lists.mapfoldl/3
test/integration/listing_authors.test.exs:8: (module)
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
有关如何进行编译的集成测试的任何帮助都很棒。
2017年6月4日更新 这是一个使用以下命令
生成的phoenix v1.3 rc2项目mix phx.new bookcase_api --no-html --no-brunch
然后,我使用以下命令
为项目生成了一个模型mix phoenix.gen.json Author name
答案 0 :(得分:2)
我猜测你的问题是在使用Phoenix 1.3项目的mix phoenix.gen.json
(这是Phoenix 1.2生成器)。请尝试使用mix phx.gen.json
。您的模型正在尝试use BookcaseApi.Web, :model
,而Phoenix 1.3方案应该use Ecto.Schema
。
答案 1 :(得分:1)
Dennis已经指出你已经为应用程序和模型使用了两个不同的生成器,所以这肯定是你问题的根源。生成的模型还存在另一个问题。看起来您打算使用单个Author
字段生成name
模式,但看起来您没有为它传递数据库表的名称,因此它将name
解释为表名。使用新生成器,您还需要为其提供一个上下文 - 在这种情况下,您可能希望使用作者,以防您想要添加与您的作者api相关的更多模块。所以你的发电机命令是:
mix phx.gen.json Authors Author authors name:string
(:字符串在技术上可以保持关闭,生成器假设您希望字段为:字符串时间,除非另有说明)
正确生成的结构如下所示:
defmodule BookcaseApi.Authors.Author do
use Ecto.Schema
schema "authors" do
field :name, :string
timestamps
end
end
Phoenix网站的文档尚未更新,以涵盖新的生成器,但源文件已有详细记录。以下是新json生成器的文档(也可通过mix help phx.gen.json
访问):https://github.com/phoenixframework/phoenix/blob/master/lib/mix/tasks/phx.gen.json.ex