id,page,ref,title,content,breadcrumbs,references
testing_plugins:testing-datasette-client,testing_plugins,testing-datasette-client,Using datasette.client in tests,"The datasette.client mechanism is designed for use in tests. It provides access to a pre-configured HTTPX async client instance that can make GET, POST and other HTTP requests against a Datasette instance from inside a test.
A simple test looks like this:
@pytest.mark.asyncio
async def test_homepage():
ds = Datasette(memory=True)
response = await ds.client.get(""/"")
html = response.text
assert ""
"" in html
Or for a JSON API:
@pytest.mark.asyncio
async def test_actor_is_null():
ds = Datasette(memory=True)
response = await ds.client.get(""/-/actor.json"")
assert response.json() == {""actor"": None}
To make requests as an authenticated actor, create a signed ds_cookie using the datasette.client.actor_cookie() helper function and pass it in cookies= like this:
@pytest.mark.asyncio
async def test_signed_cookie_actor():
ds = Datasette(memory=True)
cookies = {""ds_actor"": ds.client.actor_cookie({""id"": ""root""})}
response = await ds.client.get(""/-/actor.json"", cookies=cookies)
assert response.json() == {""actor"": {""id"": ""root""}}","[""Testing plugins""]","[{""href"": ""https://www.python-httpx.org/async/"", ""label"": ""HTTPX async client""}]"