diff --git a/.travis.yml b/.travis.yml
index b67e5f7..73a0e4b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,3 +1,3 @@
 language: rust
 script:
-  - ( cd maud_macros && cargo test --verbose )
+  - ( cd maud_macros && cargo test --features print-expansion --verbose )
diff --git a/maud_macros/Cargo.toml b/maud_macros/Cargo.toml
index 6729b4d..99769df 100644
--- a/maud_macros/Cargo.toml
+++ b/maud_macros/Cargo.toml
@@ -12,6 +12,9 @@ description = """
 Compile-time HTML templates.
 """
 
+[features]
+print-expansion = []
+
 [dependencies.maud]
 path = "../maud"
 version = "=0.3.4"
diff --git a/maud_macros/src/lib.rs b/maud_macros/src/lib.rs
index beb9243..49ecf90 100644
--- a/maud_macros/src/lib.rs
+++ b/maud_macros/src/lib.rs
@@ -10,13 +10,18 @@ extern crate maud;
 use syntax::ast::TokenTree;
 use syntax::codemap::Span;
 use syntax::ext::base::{ExtCtxt, MacEager, MacResult};
+use syntax::print::pprust;
 use rustc::plugin::Registry;
 
 mod parse;
 mod render;
 
 fn expand_html<'cx>(cx: &'cx mut ExtCtxt, sp: Span, args: &[TokenTree]) -> Box<MacResult + 'cx> {
-    MacEager::expr(parse::parse(cx, args, sp))
+    let expr = parse::parse(cx, args, sp);
+    if cfg!(feature = "print-expansion") {
+        println!("{}", pprust::expr_to_string(&expr));
+    }
+    MacEager::expr(expr)
 }
 
 #[plugin_registrar]