2016-08-12 7 views
2

私はjavascriptコントローラファイルを設計していましたが、コントローラのインスタンスにエクスプレスのメソッドRouter()のインスタンスがあるかどうかをテストしたいと思います。モカ:エクスプローラのインスタンスへのアプローチ

import {expect} from 'chai'; 
import {UF_Controller} from '../../controllers/uf.controller.js'; 

describe('UF Controller', UFControllerDescription); 

function UFControllerDescription(){ 
    it('1. Should be have a express router instance', spec1); 

    function spec1(){ 
     expect(UF_Controller.router).itself.to.respondTo('get'); 
     expect(UF_Controller.router).itself.to.respondTo('post'); 
     expect(UF_Controller.router).itself.to.respondTo('put'); 
     expect(UF_Controller.router).itself.to.respondTo('delete'); 
    } 
} 

と私のコントローラ

import express from 'express'; 
import { uf } from '../models/uf.model'; 

class UFController{ 

    constructor(){ 
     this.router = express.Router(); 
     this.router.get('/', this.getAll); 
    } 

    getAll(req, res, next){ 
     res.json(uf.todayUF()); 
    } 

    getUF(req, res, next){ 
    } 

    insertUF(req, res, next){ 
    } 

    replaceUF(req, res, next){ 
    } 

    updateUF(req, res, next){ 
    } 

    deleteUF(req, res, next){ 
    } 
} 

export const UF_Controller = new UFController(); 

私の質問は: これは明示ルータのインスタンスをチェックする有効な方法です?

答えて

4

Express型ルータをダックタイプにする必要はありません。

express.Routerはコンストラクタではなく、instanceofで検出できる正常なプロトタイプ鎖を確立しません。代わりに、establishes prototype chain manually via hacky mixin techniqueです。

それは

expect(Object.getPrototypeOf(UF_Controller.router)).to.equal(express.Router); 
+0

感謝の男でテストすることができます。良いアイデア! –

関連する問題