Catch #61 with tests and fix
authorPhil Howard <phil@gadgetoid.com>
Wed, 29 Apr 2020 11:50:37 +0000 (12:50 +0100)
committerPhil Howard <phil@gadgetoid.com>
Wed, 29 Apr 2020 11:50:37 +0000 (12:50 +0100)
library/enviroplus/noise.py
library/tests/conftest.py
library/tests/test_noise.py
library/tests/test_setup.py

index 6830bd0dd7dc0ca04e5eb7e28ef4a8dcfc1f6d9f..7b6d5e283d2990b345149d6f01369fbd8d88f4b6 100644 (file)
@@ -76,7 +76,7 @@ class Noise():
         amp_low = numpy.mean(magnitude[noise_floor:mid_start])
         amp_mid = numpy.mean(magnitude[mid_start:high_start])
         amp_high = numpy.mean(magnitude[high_start:noise_ceiling])
-        amp_total = (low + mid + high) / 3.0
+        amp_total = (amp_low + amp_mid + amp_high) / 3.0
 
         return amp_low, amp_mid, amp_high, amp_total
 
index b026172cb589e582056dd62ed84dc13bf6b791cf..8a5c54c5a60f299794035e649bfdbd91db8ca060 100644 (file)
@@ -14,6 +14,23 @@ class SMBusFakeDevice(MockSMBus):
         self.regs[0x00:0x01] = 0x0f, 0x00\r
 \r
 \r
+@pytest.fixture(scope='function', autouse=True)\r
+def cleanup():\r
+    yield None\r
+    try:\r
+        del sys.modules['enviroplus']\r
+    except KeyError:\r
+        pass\r
+    try:\r
+        del sys.modules['enviroplus.noise']\r
+    except KeyError:\r
+        pass\r
+    try:\r
+        del sys.modules['enviroplus.gas']\r
+    except KeyError:\r
+        pass\r
+\r
+\r
 @pytest.fixture(scope='function', autouse=False)\r
 def GPIO():\r
     """Mock RPi.GPIO module."""\r
index c93f8ccb37c3707ada12b1f55b0f362ef2c27efe..3778c166d904536aabd6f34be0fdddac946611c4 100644 (file)
@@ -1,32 +1,7 @@
-import sys\r
-import mock\r
 import pytest\r
 \r
 \r
-def force_reimport(module):\r
-    """Force the module under test to be re-imported.\r
-\r
-    Because pytest runs all tests within the same scope (this makes me cry)\r
-    we have to do some manual housekeeping to avoid tests polluting each other.\r
-\r
-    Since conftest.py already does some sys.modules mangling I see no reason not to\r
-    do the same thing here.\r
-    """\r
-    if "." in module:\r
-        steps = module.split(".")\r
-    else:\r
-        steps = [module]\r
-    \r
-    for i in range(len(steps)):\r
-        module = ".".join(steps[0:i + 1])\r
-        try:\r
-            del sys.modules[module]\r
-        except KeyError:\r
-            pass\r
-\r
-\r
 def test_noise_setup(sounddevice, numpy):\r
-    force_reimport('enviroplus.noise')\r
     from enviroplus.noise import Noise\r
 \r
     noise = Noise(sample_rate=16000, duration=0.1)\r
@@ -34,9 +9,6 @@ def test_noise_setup(sounddevice, numpy):
 \r
 \r
 def test_noise_get_amplitudes_at_frequency_ranges(sounddevice, numpy):\r
-    # Ippity zippidy what is this farce\r
-    # a curious function that makes my tests pass?\r
-    force_reimport('enviroplus.noise')\r
     from enviroplus.noise import Noise\r
 \r
     noise = Noise(sample_rate=16000, duration=0.1)\r
@@ -49,11 +21,10 @@ def test_noise_get_amplitudes_at_frequency_ranges(sounddevice, numpy):
 \r
 \r
 def test_noise_get_noise_profile(sounddevice, numpy):\r
-    # Ippity zippidy what is this farce\r
-    # a curious function that makes my tests pass?\r
-    force_reimport('enviroplus.noise')\r
     from enviroplus.noise import Noise\r
 \r
+    numpy.mean.return_value = 10.0\r
+\r
     noise = Noise(sample_rate=16000, duration=0.1)\r
     amp_low, amp_mid, amp_high, amp_total = noise.get_noise_profile(\r
         noise_floor=100,\r
@@ -63,11 +34,10 @@ def test_noise_get_noise_profile(sounddevice, numpy):
 \r
     sounddevice.rec.assert_called_with(0.1 * 16000, samplerate=16000, blocking=True, channels=1, dtype='float64')\r
 \r
+    assert amp_total == 10.0\r
+\r
 \r
 def test_get_amplitude_at_frequency_range(sounddevice, numpy):\r
-    # Ippity zippidy what is this farce\r
-    # a curious function that makes my tests pass?\r
-    force_reimport('enviroplus.noise')\r
     from enviroplus.noise import Noise\r
 \r
     noise = Noise(sample_rate=16000, duration=0.1)\r
index 6b6658cb5c50821eda447498b4e3faacd9961b52..2aa7b4929db3a0d2711d56ee88a28b0756ae4a80 100644 (file)
@@ -1,29 +1,3 @@
-import sys
-import mock
-
-
-def force_reimport(module):
-    """Force the module under test to be re-imported.
-
-    Because pytest runs all tests within the same scope (this makes me cry)
-    we have to do some manual housekeeping to avoid tests polluting each other.
-
-    Since conftest.py already does some sys.modules mangling I see no reason not to
-    do the same thing here.
-    """
-    if "." in module:
-        steps = module.split(".")
-    else:
-        steps = [module]
-    
-    for i in range(len(steps)):
-        module = ".".join(steps[0:i + 1])
-        try:
-            del sys.modules[module]
-        except KeyError:
-            pass
-
-
 def test_gas_setup(GPIO, smbus):
     from enviroplus import gas
     gas._is_setup = False
@@ -85,7 +59,6 @@ def test_gas_read_adc_str(GPIO, smbus):
 
 
 def test_gas_cleanup(GPIO, smbus):
-    force_reimport('enviroplus.gas')
     from enviroplus import gas
 
     gas.cleanup()