标签: elixir

不能在match子句之外使用^ xxx

这个功能:

defp entries(query, page_number, page_size) do
  offset = page_size * (page_number - 1)

  query
  |> limit([_], ^page_size) # error
  |> offset([_], ^offset)
  |> Repo.all
end
Run Code Online (Sandbox Code Playgroud)

给出了一个例外:

cannot use ^pg_size outside of match clauses
Run Code Online (Sandbox Code Playgroud)

为什么这样以及如何解决?

elixir ecto phoenix-framework

25
推荐指数
1
解决办法
4777
查看次数

在phoenix/elixir中测试文件上传

我正在尝试测试希望使用phoenix框架上传文件的控制器.我按照凤凰指南(http://www.phoenixframework.org/docs/file-uploads)上的指南进行操作,它在浏览器中工作,但我在编写测试时遇到了麻烦.这是我做的:

test "POST photo" do 
  { :ok, raw_file } = File.read "1528_27.jpg"
  conn() |> post("/api/v1/originals", %{ :image => raw_file })
  # do some assertions
end
Run Code Online (Sandbox Code Playgroud)

问题是,在控制器中,我的文件永远不会以%Plug.Upload结构形式结束,而是以二进制形式结束.所以在测试时,我在控制器中的参数看起来像:

params: %{"image" => <<255, 216, 255, 225, 18, 180, 69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 10, 0, 15, 1, 2, 0, 26, 0, 0, 0, 134, 0, 0, 0, 16, 1, 2, 0, 10, 0, ...>>},
Run Code Online (Sandbox Code Playgroud)

当我试图访问时,我的控制器会爆炸params["image"].path.这在从浏览器上传时起作用,因为那时,我在我的参数中有预期的上传结构:

params: %{
  "image" …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

24
推荐指数
1
解决办法
4671
查看次数

获取当前环境名称

在Phoenix Framework中,如何获取当前环境的名称?

我已经尝试过用env变量读取变量了System.get_env("MIX_ENV"),但是并不总是设置值.

elixir phoenix-framework

24
推荐指数
3
解决办法
6145
查看次数

从Map添加/删除键值对

如何在Elixir地图中添加(和删除)键值对?这不起作用:

map = %{a: 1, b: 2, c: 3}

map[:d] = 4
Run Code Online (Sandbox Code Playgroud)

elixir

24
推荐指数
2
解决办法
1万
查看次数

如何保存IEx历史记录?

使用IEx(Elixir的REPL),我希望能够保存我的命令历史记录.

例如:

我可以打开一个新的IEx会话并执行命令.执行命令后,我可以按向上箭头并预先填充我的最后一个命令.关闭IEx并重新打开后,我想访问我的最后一个命令.

有没有办法做到这一点?

elixir iex

24
推荐指数
3
解决办法
3149
查看次数

如何在文本上进行模式匹配?

让我们说我想模式匹配文本.具体来说,我想在第一个字母上模式匹配.

例如,如何创建一个匹配"约"和"模拟"但不匹配"beta"的模式?

我试过这个:

defmodule MatchStick do
    def doMatch([head | tail]) when head == "a" do 1 end
    def doMatch([head | tail]) do 0 end
end

res = MatchStick.doMatch("abcd");
Run Code Online (Sandbox Code Playgroud)

我也尝试过角色列表:

defmodule MatchStick do
    def doMatch([head | tail]) when head == 'a' do 1 end
    def doMatch([head | tail]) do 0 end
end

res = MatchStick.doMatch('abcd');
Run Code Online (Sandbox Code Playgroud)

都没有奏效.匹配文本的正确方法是什么?

elixir

23
推荐指数
3
解决办法
1万
查看次数

我如何从Elixir安静地离开?

Process.exit(self, :normal)做的工作,但它打印出来** (EXIT from #PID<0.49.0>) normal.有没有办法退出没有消息?

elixir

23
推荐指数
1
解决办法
5118
查看次数

Elixir中GenServers的惯用测试策略是什么?

我正在编写一个模块来查询在线天气API.我决定将它作为一个受监督的应用程序来实现GenServer.

这是代码:

defmodule Weather do
  use GenServer

  def start_link() do
    GenServer.start_link(__MODULE__, :ok, name: __MODULE__)
  end

  def weather_in(city, country) do
    GenServer.call(__MODULE__, {:weather_in, city, country_code})
  end

  def handle_call({:weather_in, city, country}) do
    # response = call remote api
    {:reply, response, nil}
  end
end
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我决定使用setup回调来启动服务器:

defmodule WeatherTest do
  use ExUnit.Case

  setup do
    {:ok, genserver_pid} = Weather.start_link
    {:ok, process: genserver_pid}
  end

  test "something" do
    # assert something using Weather.weather_in
  end

  test "something else" do
    # assert something else using Weather.weather_in
  end …
Run Code Online (Sandbox Code Playgroud)

elixir

23
推荐指数
1
解决办法
6693
查看次数

在凤凰项目中放置辅助函数的位置?

在凤凰/ elixir项目中:什么是放置辅助函数的好地方.例如:我使用Timex来处理日期,但我必须对返回的结构进行一些转换,以便将它与我的数据库驱动程序一起使用(一个使用密钥:min,另一个:分钟等).我不想在每个模型中重复这段代码,而是编写一个简单的函数来完成它.什么是一个好地方放这个?只是在/ lib文件夹中的模块中?有没有关于如何组织这个的指导方针?

elixir phoenix-framework

23
推荐指数
1
解决办法
2718
查看次数

如何使Elixir混合测试输出更加详细?

在我的Elixir/Phoenix应用程序中,当我跑步时

mix test
Run Code Online (Sandbox Code Playgroud)

我输出如下:

$ mix test
....

Finished in 0.09 seconds
4 tests, 0 failures
Run Code Online (Sandbox Code Playgroud)

每个测试成功的点数.

如何输出成功的测试名称?

在使用rspec的Rails中,我曾经在目录中使用.rspec文件执行此操作,该文件看起来像:

$ cat .rspec
--color
-fd
--tty
Run Code Online (Sandbox Code Playgroud)

Elixir中是否有相同的名称?

testing elixir-mix verbosity elixir phoenix-framework

23
推荐指数
2
解决办法
5043
查看次数

标签 统计

elixir ×10

phoenix-framework ×5

ecto ×1

elixir-mix ×1

iex ×1

testing ×1

verbosity ×1