Hello,
I’ve started using AppTest to test my streamlit app and it seems that a button’s onclick
isn’t actually triggered by AppTest when using click()
.
I’m using Streamlit 1.31
Here’s an example. If my test functions uses if button
to mutate session state, the test passes:
from streamlit.testing.v1 import AppTest
def test_testing():
def test_fn():
import streamlit as st
st.session_state["clicked"] = False
if st.button("Click me", key="button_key"):
st.session_state["clicked"] = True
at = AppTest.from_function(test_fn)
at.run()
assert at.session_state["clicked"] is False
at.button("button_key").click().run()
assert at.session_state["clicked"] is True
However, if I instead use onclick
:
from streamlit.testing.v1 import AppTest
def test_testing():
def test_fn():
import streamlit as st
def toggle():
st.session_state["clicked"] = not st.session_state["clicked"]
st.session_state["clicked"] = False
st.button("Click me", key="button_key", on_click=toggle)
at = AppTest.from_function(test_fn)
at.run()
assert at.session_state["clicked"] is False
at.button("button_key").click().run()
assert at.session_state["clicked"] is True
then the test fails.
Am I missing something, or is that something that AppTest
cannot handle yet?