非常に基本的なミドルウェアがありますが、これはテストしたいものです。expressJSの基本的なミドルウェアをテストする
最初の質問は私が使っているテストの種類です。私の理解のために、私はこのコードの単体テストを書くことはできません。 私はそれを統合テストと呼んでいます。あれは正しいですか?
2番目の問題はテスト自体です:私はdone()
を使用してタイムアウト、althougに実行しています。 私は何が間違っていますか?そして、このミドルウェアをテストする正しい方法ですか?
/middlewares/graphql.js
module.exports = (req, res, next) => {
res.header('Access-Control-Allow-Origin', '*')
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With')
if (req.is('application/graphql')) {
req.body = { query: req.body }
}
if (req.method === 'OPTIONS') {
res.sendStatus(200)
} else {
next()
}
}
/tests/middlewares/graphql.js
import nodeMocks from 'node-mocks-http'
import middleware from '../middlewares/graphql'
describe('GraphQL middleware',() => {
it('Should return 200 for valid Content-Type header', (done) => {
const req = nodeMocks.createRequest({
headers: {
'Content-Type': 'application/graphql'
},
body: {
content: 'anything'
},
method: 'OPTIONS'
})
const res = nodeMocks.createResponse()
middleware(req, res, (err) => {
expect(res.statusCode).toEqual(200)
expect(res.body.content).toEqual('anything')
expect(err).toBeNull()
done()
})
})
})
ありがとうございます。この問題のために残っているのは1つだけです。ボディは未定義ですが、 'createRequest'で設定しています。 'res._getData()'は空文字列です。 – user3142695
@ user3142695あなたはテストで 'req.body'を設定しています。 'res.body'を空でないようにしますか?その後、ミドルウェアでそれを返さなければなりません。 – MikaS
ああそれは私の側での誤解です...私のテストで 'if(req.is( 'application/graphql')){req.body = {query:req.body}}'をどうすれば処理できますか? '' application/graphql''はどこで設定する必要がありますか? – user3142695