New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[bug] Testing and mocking docs are wrong #264
Comments
We need to add a |
def __init__(self, *args, **kwargs):
self._loaded_files = []
+ self.current_env = kwargs.get('env', 'development')
super(DynaconfDict, self).__init__(*args, **kwargs)
|
I will work on this. |
@rochacbruno Your suggestion results in another error. Any other ideas? I'm trying to figure out. Traceback (most recent call last): |
@hilam maybe self.current_env = kwargs.get('env') or 'development' |
We have the same issue here with additional accessors as
|
I think it is time to reimplement the |
During my attempts to solve it, I tried to inherit from Settings or LazySettings, but it didn't work. Mysterious import errors. As you know the code better, @rochacbruno you may be able to find the solution. I could not. |
have the same issue. How I can help with it? |
This is a pending issue, we still need a way to have DynaconfDict to be an instance of Probably we can deprecate the DynaconfDict (alias it to a new class) |
Nice insight! I wrote something like this. Not optimum but for now it works ok for my purposes. Maybe somebody finds it useful. from dynaconf import LazySettings
from dynaconf.loaders.json_loader import load
mocked_settings = LazySettings(environments=True, ENV_FOR_DYNACONF="DEFAULT")
data = """
{
"default" : {
"SETTING_ONE": false,
"SETTING_TWO": "test"
}
}
"""
load(mocked_settings, filename=data) Thanks! Another option would be to use Monkeypatch |
@mazzi In fact, MonkeyPatching Dynaconf settings in Pytest doesn't work, unfortunately. Setting values don't change that way. |
I think the easiest way is to dump a settings file to a temporary location and load it. Something like: @pytest.fixture
def mock_settings_path(tmpdir):
settings_path = tmpdir.mkdir("test_package").join("settings.py")
settings_path.write(
textwrap.dedent(
f"""
SETTING_ONE = True
"""
)
)
return str(settings_path) And you can use the fixture as follows: def test_settings_file(mock_settings_path):
settings = LazySettings(settings_file=mock_settings_path)
assert SETTING_ONE == True The beauty of this approach is that you can actually add a
|
I haven't had a closer look to the code to see the inner workings of this, but initializing and mocking the object like this: from unittest.mock import patch
from dynaconf import Dynaconf
from my_module import function_name
@patch("config.settings", Dynaconf(log_level="DEBUG"))
def test_patch(self):
assert function_name() == "DEBUG" Gives the expected result when trying to access the setting in |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
Describe the bug
The docs in https://dynaconf.readthedocs.io/en/latest/guides/testing.html explain how to test with dynaconf. The point is that if you follow the explanation, you will see
AttributeError: 'DynaconfDict' object has no attribute 'current_env'
To Reproduce
Just try to follow the steps in https://dynaconf.readthedocs.io/en/latest/guides/testing.html
Expected behavior
The code don't fail and the mock can be used.
Debug output
Debug Output
Environment (please complete the following information):
The text was updated successfully, but these errors were encountered: