I run the following command on all my states (but this requires a test minion node, and root access, with various environments/pillars/etc defined). Ideally you'd crate a vm and run this for every common iteration of pillar/grain environments that define which states get run and how. Obviously that can grow geometrically, so this isn't perfect, but it is a pretty good start as far as testing syntax and making sure results are sensible.
# test sls file syntax by identifying files, then running state.show_sls.
for state in `salt-call cp.list_states | awk '{print $2}' | grep -v '^top#39;`; do
salt-call --retcode-passthrough state.show_sls ${state}
done