如何在不调用应用程序回调的情况下运行单元测试

时间:2016-06-24 02:47:32

标签: unit-testing elixir

我的应用程序回调启动Supervisor与单元测试冲突。

当我尝试运行单元测试时,由于我的进程已经启动,因此我得到了类似{:error, {:already_started, #PID<0.258.0>}}的回调。

我是否可以仅为:dev:prod执行应用程序回调,保持:test环境清除启动代码?

我正在寻找类似的东西:

def application do
[
  applications: [:logger],
  mod: {MyApplication, [], only: [:dev, :prod]} 
]

only: [:dev, :prod] - 这是件

2 个答案:

答案 0 :(得分:2)

我不知道这是否是在这种情况下处理测试的正确方法,但是这里是你如何做你要求的:

mix.exs

def application do
  rest = if(Mix.env == :test, do: [], else: [mod: {MyApp, []}])
  [applications: [:logger]] ++ rest
end

对于下面的演示,我将以下内容添加到MyApp.start/2

IO.puts "starting app..."

演示:

$ MIX_ENV=dev mix
starting app...
$ MIX_ENV=prod mix
starting app...
$ MIX_ENV=test mix # no output

答案 1 :(得分:0)

一种解决方案是在测试套件运行之前终止该进程。例如,您可以执行以下操作:

 dispatch_async(dispatch_get_main_queue(), ^{
     //int indexValue = (int)[sections indexOfObject:string];
     [rtable reloaddata];
        NSIndexPath *rowIndexPath = [NSIndexPath indexPathForRow:0 inSection:6];
     [self.rtable scrollToRowAtIndexPath:rowIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
});

这将确保在测试运行之前,该进程已被终止。