2017-12-12 2 views
2

Ich habe eine einfache Flasche App, ich möchte es mit Pytest testen.Test Kolben App mit Pytest kann nicht finden, Client Client

mein conftest.py:

@pytest.fixture 
def app(self): 
    app = create_app(TestingConfig) 

    return app 

mein test_view.py:

class TestMainView: 

def test_ping(self, client): 
    res = client.get(url_for('main.index')) 
    assert res.status_code == 200 

wenn ich laufe der Test die Verwendung pytest es einen Fehler werfen sagen:

fixture 'client' not found 
>  available fixtures: app, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, doctest_namespace, monkeypatch, pytestconfig, record_xml_property, recwarn, tmpdir, tmpdir_factory 
>  use 'pytest --fixtures [testpath]' for help on them. 

Ich habe eine andere Testdatei, in der Ich teste Standardkonfigurationen und es übergibt:

class TestTestingClass(object): 
app = create_app(TestingConfig) 

def test_app_is_test(self): 
    ''' test the test enviroment is set okay and works''' 
    assert self.app.config['SECRET_KEY'] == 'something hard' 
    assert self.app.config['DEBUG'] == True 
    assert self.app.config['TESTING'] == True 
    assert current_app is not None 
    assert self.app.config['SQLALCHEMY_DATABASE_URI'] == 'sqlite:////tmp/testing.db' 

bearbeiten: konnte ich einen leeren Test durch den Wechsel passieren:

conftest.py: zu

@pytest.fixture 
def app(): 
    app = create_app(TestingConfig) 

    return app 


@pytest.fixture 
def client(app): 
    return app.test_client() 

und meine Testdatei:

def test_index(client): 
    assert True 

aber, ich kann immer noch nicht dieübergebenwenn es:

def test_index(client): 
    assert client.get(url_for('main.index')).status_code == 200 

aber dieses Mal, ich bin immer ein Fehler, dass die besagt, sagt:

RuntimeError: Attempted to generate a URL without the application context being pushed. This has to be executed when application context is available. 

Antwort

0

ich so viele verschiedene Dinge ausprobiert. Ich aktualisierte pip für dieses Projekt virtualenvironment und aktualisierte die pytest und pytest-flask. aber keiner hat funktioniert.

konnte ich durch die Tests bestehen:

  • die pytest und pytest-flask von virtualenvironment entfernt.
  • entfernt meine systemweiten Installationen von ihnen.
  • seltsam, ich hatte ein Paket mit dem Namen flask-pytest ich es entfernt (in der env)
  • installiert sie wieder systemweit.
  • installiert sie wieder auf virtualenvironment.

ich weiß nicht, wie das mit den Tests etwas hatte, aber es hat funktioniert. Das einzige, was anders ist, dass ich das genannte flask-pytest Ding nicht installiert habe.

0

Sie müssen Ihre inkorrekte client fixture löschen (siehe die Implementierung von pytest-flask für die richtige).

Danach müssen Sie pytest-flask und pytest innerhalb der virtualenv installieren, entfernen Sie besser die systemweiten, um Verwirrung zu vermeiden.

Danach sollten Sie in der Lage sein, Ihre Tests durchzuführen.

+0

Client-Gerät war für die zweite Art von Test und Implementierung. Was Sie sagen, ist die erste Art von Code, die ich zur Verfügung gestellt habe, und das hat nicht funktioniert. Ich experimentiere noch und kann die Lösung basierend auf der genauen Sache ändern, die ich getan habe, um es zu beheben. – senaps