Best Practices for Testing LangGraph Nodes Separately

Hi everyone,

I really enjoy using LangGraph because it makes building and connecting nodes together very easy. However, I’m running into a challenge when trying to test individual nodes separately.

The problem is that nodes are usually connected, so if I update a single node, running it often triggers the entire workflow. I’ve tried two approaches so far:

  1. Calling the node’s function directly.

  2. Creating a new workflow that contains only the updated node.

I’m curious about how you approach testing nodes in isolation. Do you have best practices or tips for efficiently testing a node without triggering the full workflow? Any advice or examples would be greatly appreciated!

Thanks in advance!

I’m currently exploring this framework: https://scenario.langwatch.ai/

It has helped me a lot on testing any custom configuration/assertions.

I’m now able to test full workflows, individual nodes, pure llm calls or agentic tool usage (which in my case I used a mocked tool approach so I dont need to rely on real backend calls). It allows me to implement deterministic or LLM Judge evals/metrics.

Take a look specially here: The Agent Testing Pyramid – Scenario

I dediced to try/explore different frameworks because I found quite difficult to simulate some specific parts of the workflow/scenarios using only langsmith.

Hi @arthurmarcal , thanks for your suggestion! I would definitely look into the framework!

Hi Everyone,

I’m glad this question was raised—I too face this exact challenge of testing individual nodes.

@arthurmarcal, thanks for sharing your experience with Scenario.

My current goal is to find a way to effectively test individual nodes using standard Python testing libraries like unittest or pytest, without introducing new third-party dependencies.

Specifically, the core challenge seems to be preparing the test environment for a single node. I’m trying to understand the best practices for:

  1. Simulating Node Inputs: What’s an elegant and reliable pattern for creating a mock LangGraph State object? I need to effectively simulate the variety of states a node might receive from a prior step in a larger graph.

  2. Isolating Node Logic: Beyond mocking the state, are there specific strategies you use to isolate a node’s logic from its dependencies, such as tool calls or LLM invocations?

I’m curious if any of you have found a standard pattern for this kind of rigorous, dependency-free testing that integrates well with existing Python ecosystems.

Thanks in advance for any insights!

Hi @Abhilash , thanks for joining the discussion! I have the same feeling about your concern. In my application, I refactored each node into a separate folder as shown below, so it’s easier to call the nodes for testing:

main.py
nodes/
    node1.py
    node2.py
workflow/
    graph.py
    state.py