JavaScript
Node.js
iconv
chai
chia-http

chai-httpでShift-JisのレスポンスをUTF-8に変換する

chai-httpを使っていたShift-Jisで帰ってきたレスポンスを変換するのに
ハマったのでメモ

test.js
chai.use(chaiHttp);

const binaryParser = (res, cb) => {
    res.setEncoding("binary");
    res.data = "";
    res.on("data", function (chunk) {
      res.data += chunk;
    });
    res.on("end", function () {
      cb(null, new Buffer(res.data, "binary"));
    });
  };

describe('test', function(){
  it('API request test', (done) => {
    chai.request('http://www.example.com')
      .post('/api/hogehoge')
      .set('Content-Type', 'application/x-www-form-urlencoded')
      .send({
        'hoge': 'value',
      })
      .buffer()
      .parse(binaryParser)
      .end((err, res) => {
        let iconv = new Iconv('SHIFT-JIS', 'UTF-8//IGNORE');
        var convertedString = iconv.convert(res.body).toString();
        fs.writeFile('output.txt', convertedString, (err) => {})
        done()
      })
  })
})

普通に書くと res から Buffer が取得できないので
bufferparse を追加しているっぽい。

参考 : https://github.com/chaijs/chai-http/issues/126