A late reply, but in case it's still relevant:
2. You can trigger changes manually with something like:
Guard.async_queue_add(modified: files, added: [], removed: [])
But you probably want something more low-level here:
Runner.new.run_on_changes(*changes.values)
But, this uses global state, which you'll have to stub out.
3. There's a Dsl class which can evaluate code, though there's a bit to stub out. Check out `spec/lib/guard/dsl_spec.rb` which does this exactly
4. You probably want to stub/mock out the CsvFile and XlsFile classes before programatically triggering changes
It's important to decide whether you want to test if the guards are properly configured, or if you want to check the rules - because the Guardfile handles both (and you'll probably prefer to test them separately).
Open an issue on GH if you're interested and let me know what you need there.