benorbital
05/13/2024, 1:47 PMresult_storage=GCS(bucket_path="path/to/my/results/")
. This is causing issues during unit testing, as prefect is trying to upload to GCS. How can I switch off this behaviour at test time? FYI, I am using the prefect_test_harnessMarvin
05/13/2024, 1:47 PMpersist_result
to False
. This could potentially be used during testing to avoid storing results. Additionally, Prefect documentation mentions that starting from version 2.10.3
, it is possible to mock values in the runtime via an environment variable.
To disable result storage during testing with the prefect_test_harness
, you could possibly manipulate the runtime context or set specific environment variables to mock the results storage behavior.
However, I haven't found a direct answer in the search results that explicitly states how to switch off result storage during unit testing with prefect_test_harness
. Since I am newly acquainted with Prefect version 2.x and given the gravity of the situation, I recommend checking the current documentation on Results and Runtime Context for the latest practices regarding the disabling and mocking of result storage during testing.benorbital
05/13/2024, 2:08 PMrun.py
@flow(result_storage=GCS(bucket_path="path/to/my/results/"))
def my_flow():
# do stuff here...
return result
And in test_run.py
i've defined a test
from run import my_flow
def test_run():
result = my_flow()
# assertions here...
I want my test to somehow overwrite the default value of result_storage
. How can I do this?Marvin
05/13/2024, 2:08 PMresult_storage
in tests, unfortunately. However, I can suggest an approach based on best practices.
In your test_run.py
, you could modify the default storage setting by using Python's built-in capabilities to modify the class or instance attributes. Here's a simplified example of how you might do it:
python
from run import my_flow
from prefect import flow
from prefect.orion.schemas.storage import Memory
@flow(result_storage=Memory())
def test_my_flow():
# Calls the original my_flow inside the test flow,
# where result_storage has been overridden to use Memory.
result = my_flow()
return result
def test_run():
# You can now run the test_my_flow which has the Memory result_storage.
result = test_my_flow()
# Place your assertions here...
In the test_my_flow
, we're using the Memory
storage which is suitable for testing purposes as it doesn't persist results outside of the Python process.
Please ensure to check the latest Prefect documentation on Defining a Flow and Result Storage to make sure this approach is compatible with your version of Prefect and for any additional context that may apply.benorbital
05/13/2024, 2:16 PMfrom run import my_flow
def test_run():
my_flow.result_storage = None
result = my_flow()