Skip to content

NameError: name 'DashComposite' is not defined #1764

@juliausp

Description

@juliausp

Describe your context


Package              Version
-------------------- ---------
amqp                 5.0.6
atomicwrites         1.4.0
attrs                21.2.0
beautifulsoup4       4.10.0
billiard             3.6.4.0
Brotli               1.0.9
celery               5.1.2
certifi              2021.5.30
charset-normalizer   2.0.6
click                7.1.2
click-didyoumean     0.0.3
click-plugins        1.1.1
click-repl           0.2.0
colorama             0.4.4
dash                 2.0.0
dash-core-components 2.0.0
dash-html-components 2.0.0
dash-table           5.0.0
dill                 0.3.4
diskcache            5.2.1
flaky                3.7.0
Flask                2.0.1
Flask-Compress       1.10.1
idna                 3.2
iniconfig            1.1.1
itsdangerous         2.0.1
Jinja2               3.0.1
kombu                5.1.0
lxml                 4.6.3
MarkupSafe           2.0.1
multiprocess         0.70.12.2
numpy                1.21.2
packaging            21.0
pandas               1.3.3
percy                2.0.2
pip                  21.2.4
plotly               5.3.1
pluggy               1.0.0
prompt-toolkit       3.0.20
psutil               5.8.0
py                   1.10.0
pyparsing            2.4.7
pytest               6.2.5
pytest-mock          3.6.1
pytest-sugar         0.9.4
python-dateutil      2.8.2
pytz                 2021.1
redis                3.5.3
requests             2.26.0
selenium             3.141.0
setuptools           51.3.3
six                  1.16.0
soupsieve            2.2.1
tenacity             8.0.1
termcolor            1.1.0
toml                 0.10.2
urllib3              1.26.6
vine                 5.0.0
waitress             2.0.0
wcwidth              0.2.5
Werkzeug             2.0.1
wheel                0.36.2

Operating System: Windows 10
Ubuntu 20.04 (WSL)

Describe the bug

I would like to run a test in my gitlab-ci.yml. The test passes locally, but the gitlab-ci pipeline fails, giving the following error message:
A minimum example is provided.

============================= test session starts ==============================
platform linux -- Python 3.8.0, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: /builds/jwinter/dash_testing_in_gitlab_ci
plugins: dash-2.0.0
collected 1 item
test_app.py E                                                            [100%]
==================================== ERRORS ====================================
________________________ ERROR at setup of test_example ________________________
request = <SubRequest 'dash_duo' for <Function test_example>>
dash_thread_server = <dash.testing.application_runners.ThreadedRunner object at 0x7f12b8d2a130>
tmpdir = local('/tmp/pytest-of-root/pytest-0/test_example0')
    @pytest.fixture
    def dash_duo(request, dash_thread_server, tmpdir):
>       with DashComposite(
            dash_thread_server,
            browser=request.config.getoption("webdriver"),
            remote=request.config.getoption("remote"),
            remote_url=request.config.getoption("remote_url"),
            headless=request.config.getoption("headless"),
            options=request.config.hook.pytest_setup_options(),
            download_path=tmpdir.mkdir("download").strpath,
            percy_assets_root=request.config.getoption("percy_assets"),
            percy_finalize=request.config.getoption("nopercyfinalize"),
            pause=request.config.getoption("pause"),
        ) as dc:
E       NameError: name 'DashComposite' is not defined
/usr/local/lib/python3.8/site-packages/dash/testing/plugin.py:141: NameError
=========================== short test summary info ============================
ERROR test_app.py::test_example - NameError: name 'DashComposite' is not defined
=============================== 1 error in 0.09s ===============================

Project structure:

My File Structure
├── .gitlab-ci.yml
├── app.py
├── conftest.py
├── requirements_for_testing.txt
├── test_app.py

app.py

copy of https://dash.plotly.com/layout

from dash import dcc, html
import dash
import plotly.express as px
import pandas as pd

app = dash.Dash(__name__)

df = pd.DataFrame({
   "Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
   "Amount": [4, 1, 2, 2, 4, 5],
   "City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"]
})

fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")

app.layout = html.Div(children=[
   html.H1(children='Hello Dash'),

   html.Div(children='''
       Dash: A web application framework for your data.
   '''),

   dcc.Graph(
       id='example-graph',
       figure=fig
   )
])

if __name__ == '__main__':
   app.run_server(debug=True)

gitlab.ci

So far, I get no difference if I add

  • selenium/standalone-chrome :latest
  • selenium__standalone-chrome :latest
    or nothing
stages:
  - test
test:dashboard:
  stage: test
  image: python:3.8.0
  services:
    - selenium/standalone-chrome :latest
  before_script:
    - pip install -r requirements_for_testing.txt
    - pip install pytest
  script: |
    export PYTHONPATH=$PYTHONPATH:$PWD
    pytest

conftest.py

from selenium.webdriver.chrome.options import Options

def pytest_setup_options():
    options = Options()
    options.add_argument('--headless')
    return options

test_app.py

from dash.testing.application_runners import import_app
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions


def test_example(dash_duo):
    app = import_app(
        app_file='app')
    dash_duo.start_server(app)
    WebDriverWait(dash_duo.driver, 10).until(
        expected_conditions.visibility_of_element_located(
            (By.CSS_SELECTOR, "#example-graph")))
    assert dash_duo.driver.find_element_by_css_selector(
        "#example-graph").is_displayed()

requirements_for_testing.txt

dash >= 2.0.0
dash[testing]
pytest
selenium
pandas
plotly
requests

Expected behavior

Please help me to write a gitlab-ci.yml file that makes it possible to run the test without this error.
Thank you very much for considering this issue. I haven't been able to find anything on this error.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions