Fixtures

Parameterised Fixtures

Like regular pytest fixtures, pytest_lsp.fixture() supports parameterisation. This can be used to run the same set of tests while pretending to be a different client each time.

@pytest_lsp.fixture(
    params=["neovim", "visual_studio_code"],
    config=ClientServerConfig(server_command=[sys.executable, "server.py"]),
)
async def client(request, lsp_client: LanguageClient):
    # Setup
    params = InitializeParams(capabilities=client_capabilities(request.param))
    await lsp_client.initialize_session(params)

    yield

    # Teardown
    await lsp_client.shutdown_session()

Requesting Other Fixtures

As you would expect, it’s possible to request other fixtures to help set up your client.

@pytest.fixture(scope="module")
def client_name():
    return "neovim"


@pytest_lsp.fixture(
    config=ClientServerConfig(server_command=[sys.executable, "server.py"]),
)
async def client(client_name: str, lsp_client: LanguageClient):
    # Setup
    params = InitializeParams(capabilities=client_capabilities(client_name))
    await lsp_client.initialize_session(params)

    yield

    # Teardown
    await lsp_client.shutdown_session()