2017-09-19 14 views
0

私はsinon.jsでmocksを使ってテストに合格したいと思います。 app.js:sinon.jsでmockを使ってテストに合格するには?

const express = require('express'); 
const route = require('./server/routes/index'); 
const app = express(); 
app.use('/', route); 

index.js:

const router = require('express').Router(); 
const ctrlUsers = require('../controllers/users'); 
router.get('/users', ctrlUsers.UsersRead); 

users.js:

const User = require('../models/user'); 
    module.exports.UsersRead = function UsersRead(req, res) { 
    User 
    .query() 
    .then((user) => { 
     res.render('results'); 
    }) 
    .catch((err) => { 
     res.render('error'); 
    }); 
}; 

user.test.js:私は実行

const app = require('../app'); 
const sinon = require('sinon'); 

describe('Get /users',() => { 
    const appMock = sinon.mock(app); 
    test('status of get',() => { 
    appMock.expects('get').once().withArgs('/users').returns(0); 

    appMock.restore(); 
    appMock.verify(); 
    }); 
}); 

テストファイルが失敗し、このエラーが発生しました:

ExpectationError: Expected get(/providers[, ...]) once (never called) 

    at Object.fail (node_modules/sinon/lib/sinon/mock-expectation.js:281:25) 
    at Object.verify (node_modules/sinon/lib/sinon/mock.js:108:29) 
    at Object.test (__tests__/usersRoutes.test.js:11:13) 
     at Promise (<anonymous>) 
     at <anonymous> 

どうすれば修正できますか?

+0

を見てみましょうあなたはapp' 'のためのモックを作成しましたが、あなたはどこでもアプリを呼び出すことはありません。たとえば、supertestを使用してリクエストを送信する必要があります。 – alexmac

+0

@alexmac 'request(app).get(/ users).expect(200)'をプログラムに追加する必要がありますか? – user3618284

答えて

0

アプリを呼び出して模擬してください。モックの作成後、あなたのコードにapp.get('/users')を追加します。

const app = require('../app'); 
const sinon = require('sinon'); 

describe('Get /users',() => { 
    const appMock = sinon.mock(app); 
    test('status of get',() => { 
    appMock.expects('get').once().withArgs('/users').returns(0); 
    app.get('/users'); 
    appMock.restore(); 
    appMock.verify(); 
    }); 
}); 

は詳細についてはSinon.js

関連する問題