fix issue320 - fix class scope for fixtures when mixed with
module-level functions. Thanks Anatloy Bubenkoff.
This commit is contained in:
		
						commit
						13ddce2381
					
				
							
								
								
									
										1
									
								
								AUTHORS
								
								
								
								
							
							
						
						
									
										1
									
								
								AUTHORS
								
								
								
								
							|  | @ -9,6 +9,7 @@ Floris Bruynooghe | |||
| Jason R. Coombs | ||||
| Wouter van Ackooy | ||||
| Samuele Pedroni | ||||
| Anatoly Bubenkoff  | ||||
| Brianna Laugher | ||||
| Carl Friedrich Bolz | ||||
| Armin Rigo | ||||
|  |  | |||
|  | @ -1,6 +1,9 @@ | |||
| Changes between 2.3.5 and 2.4.DEV | ||||
| ----------------------------------- | ||||
| 
 | ||||
| - fix issue320 - fix class scope for fixtures when mixed with | ||||
|   module-level functions.  Thanks Anatloy Bubenkoff. | ||||
| 
 | ||||
| - you can specify "-q" or "-qq" to get different levels of "quieter" | ||||
|   reporting (thanks Katarzyna Jachim) | ||||
| 
 | ||||
|  |  | |||
|  | @ -1317,7 +1317,8 @@ class FixtureRequest(FuncargnamesCompatAttr): | |||
|             x = self._pyfuncitem.getparent(pytest.Class) | ||||
|             if x is not None: | ||||
|                 return x | ||||
|             scope = "module" | ||||
|             # fallback to function | ||||
|             return self._pyfuncitem | ||||
|         if scope == "module": | ||||
|             return self._pyfuncitem.getparent(pytest.Module) | ||||
|         raise ValueError("unknown finalization scope %r" %(scope,)) | ||||
|  |  | |||
|  | @ -513,12 +513,12 @@ class TestRequestCachedSetup: | |||
| 
 | ||||
|     def test_request_cachedsetup_class(self, testdir): | ||||
|         reprec = testdir.inline_runsource(""" | ||||
|             mysetup = ["hello", "hello2"].pop | ||||
|             mysetup = ["hello", "hello2", "hello3"].pop | ||||
| 
 | ||||
|             def pytest_funcarg__something(request): | ||||
|                 return request.cached_setup(mysetup, scope="class") | ||||
|             def test_func1(something): | ||||
|                 assert something == "hello2" | ||||
|                 assert something == "hello3" | ||||
|             def test_func2(something): | ||||
|                 assert something == "hello2" | ||||
|             class TestClass: | ||||
|  | @ -1090,7 +1090,7 @@ class TestAutouseManagement: | |||
|             def arg(): | ||||
|                 l.append(1) | ||||
|                 return 0 | ||||
|             @pytest.fixture(scope="class", autouse=True) | ||||
|             @pytest.fixture(scope="module", autouse=True) | ||||
|             def something(arg): | ||||
|                 l.append(2) | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,28 @@ | |||
| """Tests for fixtures with different scoping.""" | ||||
| 
 | ||||
| 
 | ||||
| def test_class_scope_with_normal_tests(testdir): | ||||
|     testpath = testdir.makepyfile(""" | ||||
|         import pytest | ||||
| 
 | ||||
|         class Box: | ||||
|             value = 0 | ||||
| 
 | ||||
|         @pytest.fixture(scope='class') | ||||
|         def a(request): | ||||
|             Box.value += 1 | ||||
|             return Box.value | ||||
| 
 | ||||
|         def test_a(a): | ||||
|             assert a == 1 | ||||
| 
 | ||||
|         class Test1: | ||||
|             def test_b(self, a): | ||||
|                 assert a == 2 | ||||
| 
 | ||||
|         class Test2: | ||||
|             def test_c(self, a): | ||||
|                 assert a == 3""") | ||||
|     reprec = testdir.inline_run(testpath) | ||||
|     for test in ['test_a', 'test_b', 'test_c']: | ||||
|         assert reprec.matchreport(test).passed | ||||
		Loading…
	
		Reference in New Issue