読者です 読者をやめる 読者になる 読者になる

Node.js+Express+Expressoでセッション情報を持ったまま遷移するテスト

 要はログインした状態でどこかのページに行ってテストしたいわけです。

assert.response(server,
    {
        url: '/login',
        method: 'post',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' 
        },
        data: 'user[mailaddress]=momota@kana.com&user[password]=chabatake'
    },
    {status: 200},
    function(res) {
        assert.response(server,
            {
                url: '/dosomething-withlogin',
                method: 'post',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
                },
                data: 'text=ganbacchaimaxx!'
            },
            {status: 200}
        );
    }
);

だいたいこんな感じです。assert.responseの入れ子とかみっともない感じですけど、なんかもっとスマートな書き方あれば教えて下さい。
それで上のコードだと1回目のassert.responseコールバックのresに含まれているクッキーの情報(セッションキー)が2回目のassert.responseに渡されないのでログイン状態が維持されない。じゃあどのようにクッキーを持たせるのか、Expressで使われているConnectのcookieParserソースコードを読むと、単にheadersにcookieを追加すればよいようです。なので以下のコードとなります。
https://github.com/senchalabs/connect/blob/master/lib/middleware/cookieParser.js

assert.response(server,
    {
        url: '/login',
        method: 'post',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' 
        },
        data: 'user[mailaddress]=momota@kana.com&user[password]=chabatake'
    },
    {status: 200},
    function(res) {
        assert.response(server,
            {
                url: '/dosomething-withlogin',
                method: 'post',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
                    // 下の1行追加、resはset-cookieなのにreqはcookie
                    'cookie': res.headers['set-cookie']
                },
                data: 'text=ganbacchaimaxx!'
            },
            {status: 200}
        );
    }
);

これでOK