Add alternative approach that uses wrappers
This commit is contained in:
		
							parent
							
								
									c6a711c2fc
								
							
						
					
					
						commit
						4f8b8c8d31
					
				| 
						 | 
					@ -90,3 +90,51 @@ fixtures from existing ones.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The new fixture ``context`` inherits the scope from the used fixtures.
 | 
					The new fixture ``context`` inherits the scope from the used fixtures.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Alternative approach
 | 
				
			||||||
 | 
					--------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A new helper function named ``fixture_request`` tells pytest to yield all
 | 
				
			||||||
 | 
					parameters of a fixture.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. code-block:: python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @pytest.fixture(params=[
 | 
				
			||||||
 | 
					        pytest.fixture_request('default_context'),
 | 
				
			||||||
 | 
					        pytest.fixture_request('extra_context'),
 | 
				
			||||||
 | 
					    ])
 | 
				
			||||||
 | 
					    def context(request):
 | 
				
			||||||
 | 
					        """Returns all values for ``default_context``, one-by-one before it
 | 
				
			||||||
 | 
					        does the same for ``extra_context``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        request.param:
 | 
				
			||||||
 | 
					            - {}
 | 
				
			||||||
 | 
					            - {'author': 'alice'}
 | 
				
			||||||
 | 
					            - {'project_slug': 'helloworld'}
 | 
				
			||||||
 | 
					            - {'author': 'bob', 'project_slug': 'foobar'}
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        return request.param
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note:: 
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    How should the scoping work in that case? Ideally it uses invocation scope
 | 
				
			||||||
 | 
					    and relies on its params
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The same helper can be used in combination with ``pytest.mark.parametrize``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. code-block:: python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @pytest.mark.parametrize(
 | 
				
			||||||
 | 
					        'context, expected_response_code',
 | 
				
			||||||
 | 
					        [
 | 
				
			||||||
 | 
					            (pytest.fixture_request('default_context'), 0),
 | 
				
			||||||
 | 
					            (pytest.fixture_request('extra_context'), 0),
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    def test_generate_project(cookies, context, exit_code):
 | 
				
			||||||
 | 
					        """Call the cookiecutter API to generate a new project from a
 | 
				
			||||||
 | 
					        template.
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        result = cookies.bake(extra_context=context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assert result.exit_code == exit_code
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue