में पर्यवेक्षकों का परीक्षण करने के लिए सबसे अच्छा अभ्यास मैंने एक उचित बिट के आसपास गुगल किया है और विषय पर कुछ भी ढूंढने में असमर्थ हूं - या तो एलिक्सीर बहुत छोटी भाषा है या मैं गलत शर्तों से खोज रहा हूं।Elixir
मैं जोस वैलीम के इलीक्सिर पोर्टल ट्यूटोरियल (https://howistart.org/posts/elixir/1) के माध्यम से काम कर रहा हूं और अभ्यास के लिए परीक्षण तैयार कर रहा हूं (मैंने सभी कार्यक्षमताएं बनाई हैं)। ट्यूटोरियल के
भाग Portal.Door मॉड्यूल दोष सहिष्णु बनाने के लिए एक पर्यवेक्षक बनाने जा रहा है।
मैं (अगर यह अनुचित तरीके से बंद है जैसे कि पर्यवेक्षक के पुनः प्रारंभ Portal.Door उदाहरण) दोष सहिष्णुता परीक्षण करने के लिए निम्न कोड
defmodule PortalTest do
use ExUnit.Case, async: true
...
test "supervisor restarts doors" do
{:ok, pid} = Portal.shoot(:third)
Process.unlink(pid)
Process.exit(pid, :shutdown)
assert Portal.Door.get(:third) == [] #new doors initialize with an empty array
end
end
का उपयोग कर कोशिश कर रहा हूँ लेकिन जब मैं चलाने मैं इस त्रुटि प्राप्त हो रही परीक्षण:
1) test supervisor restarts doors (PortalTest)
test/portal_test.exs:35
** (exit) exited in: GenServer.call(:third, {:get, #Function<3.47016826/1 in Portal.Door.get/1>}, 5000)
** (EXIT) shutdown
stacktrace:
(elixir) lib/gen_server.ex:356: GenServer.call/3
test/portal_test.exs:39
तो, मुझे आश्चर्य है कि ऐसा करने का कोई बेहतर तरीका है या मेरा कोड बस खराब है।
वास्तव में मैं अपना मूल विवरण वापस लेता हूं। ऐसा लगता है कि जब मैं कुछ डीबगिंग करने के लिए IO.inspect का उपयोग करता हूं तो यह देरी का कारण बनता है जो प्रक्रिया को पुनरारंभ करने के लिए काफी लंबा होता है। इसके बिना प्रक्रिया का इंतजार करने के लिए उपयोग करने के लिए रिकर्सन। कहीं भी/1 शून्य मूल्य के अलावा कुछ और लौटने के लिए काम नहीं लगता है (संभवतः मेरी गलती)। तो, मैं इसके साथ जा रहा हूं: timer.sleep/1 अभी के लिए। – user2577226