Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8883

【自分用メモ】supertestとpassport-stubをmochaテストに組み合わせる

$
0
0

supertestとは

supertestはmochaと組み合わせて使うのですが、ExpressのRouterモジュールのテストを行うことができます。
例えば以下の例では、/にアクセスしたらindexRouterが処理されるかテストしてくれます。
もちろん、/login/logoutもテストしてくれます。

app.js
app.use('/',indexRouter);app.use('/login',loginRouter);app.use('/logout',logoutRouter);

passport-stubとは

passport-stubは、passportモジュールを利用した認証システムを、テストする際に役に立ちます。
例えば、
「facebook認証などのテストをしたいけど、facebookアカウントを持っていない!」
といった時に役に立ちます。

テストの例

test.js
//supertestの読み込みconstrequest=require('supertest');//supertestで使う、app.jsの読み込みconstapp=require('app');//passport-stubの読み込みconstpassportStub=require('passport-stub');//ログイン(/login)のテストであることを明示describe('/login',()=>{//before、afterはmochaの機能before(()=>{//テストの前にpassportstubモジュールでログインpassportStub.install(app);//'testuser'としてログインpassportStub.login({username:'testuser'});});after(()=>{//テストの後にpassportstubモジュールでログアウトpassportStub.logout();passportStub.uninstall(app);});//以下の記法は、supertestの記法 //テストの内容を指定it('ログインのためのリンクが含まれる',(done)=>{//request(app).get('/login') で、 /login への GETリクエストを作成request(app).get('/login')//文字列を2つ引数として渡すとヘッダのテスト.expect('Content-Type','text/html; charset=utf-8')//正規表現を1つ渡すとHTMLのテスト.expect(/<a href="\/auth\/facebook"/)//期待されるステータスコードの整数と、テスト自体の引数に渡されるdone 関数を渡すと、レスポンスヘッダのテスト.expect(200,done);});it('ログイン時はユーザー名が表示される',(done)=>{request(app).get('/login').expect(/testuser/).expect(200,done);});});//ログアウト(/logout)のテストであることを明示describe('/logout',()=>{ //テスト内容を明示it('ログアウト後に / にリダイレクトされる',(done)=>{////request(app).get('/logout')で、/logoutへのGETリクエストを作成request(app).get('/logout')// `/`へリダイレクトされるかのテスト.expect('Location','/')    // ステータスコードがリクエストであるかのテスト.expect(302,done);});});

describeitbeforeafterはmochaの書き方。
request(app).get.expectはsupertestの書き方
passportStub.install(app)passportStub.loginはpassport-stubの書き方

テスト結果

スクリーンショット 2019-12-03 22.47.50.png


Viewing all articles
Browse latest Browse all 8883

Trending Articles