I tried to do exactly that today, and found out that it fails with HTTP 400. I guess that superagent does not respect the precise form layout described in http://aws.amazon.com/articles/1434.
I recommend that you use the "form-data" module instead (https://github.com/felixge/node-form-data).
This worked for me:
var FormData = require('form-data');
var fs = require('fs');
...
it('should upload to S3 with a multipart form', function (done) {
var policy = {/* your S3 policy */};
var form = new FormData();
form.append('AWSAccessKeyId', policy.AWSAccessKeyId);
form.append('key', policy.key);
form.append('policy', policy.policy);
form.append('signature', policy.signature);
form.append('file', fs.createReadStream('path/to/file'));
form.submit('https://YOUR_BUCKET.s3.amazonaws.com/', function (err, res) {
if (err) return done(err);
res.statusCode.should.be.exactly(204);
done();
});
});