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);});});
describe
、it
、before
、after
はmochaの書き方。request(app).get
、.expect
はsupertestの書き方passportStub.install(app)
、passportStub.login
はpassport-stubの書き方