#python #flask #pytest #plotly-dash
#python #flask #пытест #plotly-dash
Вопрос:
У меня есть приложение plotly dash, определенное в 2 файлах:
app.py
from flask import Flask
import dash
import dash_bootstrap_components as dbc
server = Flask(__name__)
app = dash.Dash(name='MYAPP', external_stylesheets=[dbc.themes.BOOTSTRAP])
app.title = 'MYAPP'
app.config.suppress_callback_exceptions = True
index.py
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
from flask import session
from app import app
srv = app.server
app.layout = html.Div([
dcc.Location(id='url', refresh=False),
html.Div(id='page-content'),
])
@app.callback(Output('page-content', 'children'),
[Input('url', 'pathname'),
Input('url', 'hash'),])
def display_page(p_pathname, p_hash):
# Some logic to serve different pages
# (...)
if __name__ == '__main__':
app.run_server(processes=1, debug=True, threaded=True)
Теперь, когда я пытаюсь запустить более одного теста с использованием import_app,
teststest_something.py
from dash.testing.application_runners import import_app
def test_scenario_1(dash_duo):
app = import_app('index')
dash_duo.start_server(app)
dash_duo.wait_for_element_by_id('page-content', timeout=30)
# do some tests (...)
def test_scenario_2(dash_duo):
app = import_app('index')
dash_duo.start_server(app)
# do other tests (...)
Я получаю сообщение об ошибке в сценарии 2:
dash.exceptions.DuplicateCallbackOutput:
You have already assigned a callback to the output
with ID "page-content" and property "children". An output can only have
a single callback function. Try combining your inputs and
callback functions together into one function.
Как запустить эти два сценария без ошибок? Является ли это правильным подходом для нескольких тестов приложения Plotly Dash?
Комментарии:
1. Что такое dash_duo?
2. Это плохо документировано. Основную информацию можно найти здесь: dash.plotly.com/testing Как я понимаю, это своего рода приспособление (одно из двух), которое поддерживает графические варианты тестирования Dash: — dash_duo запускает сам сервер flask, в то время как — dash_br предполагает, что у нас уже есть рабочий сервер, указанный в URL. Я хотел, чтобы тесты были «независимыми» от любого сервера.
3. Вы решили эту проблему? В таком случае как?
4. Нет, мы перешли на django…