Я создал этот компонент промежуточного программного обеспечения, который вернет next()
, когда только параметры для маршрута определены queryItems
.Тестирование экспресс-промежуточного программного обеспечения, которое возвращает next()/next («route»)
Я недавно нашел node-mocks-http, который подделывает выражения req
и res
объектов. Однако это не подделка next
. Мне было интересно, как это сделать? Ниже у меня есть пример того, как я открываю обратный вызов next
и определяю свой оператор expect
внутри него.
middleware.hasOnlyQuery = function(queryItems){
return function(req, res, next){
if(typeof queryItems == "string") queryItems = [queryItems]
if(_.hasOnly(req.query, queryItems)) return next()
return next("route")
}
}
Вот тест.
it("should only have shop query", function(done){
var req = httpMocks.createRequest({
method: 'GET',
query: {
foo: "bar"
}
});
var res = httpMocks.createResponse()
var fn = middleware.hasOnlyQuery(["foo"])(req, res, function(err){
expect(err).to.equal()
return done()
})
})
it("should not only have shop query", function(done){
var req = httpMocks.createRequest({
method: 'GET',
query: {
foo: "bar",
bar: "foo"
}
});
var res = httpMocks.createResponse()
var fn = middleware.hasOnlyQuery(["foo"])(req, res, function(err){
expect(err).to.equal("route")
return done()
})
})
Это правильный способ сделать это? Есть ли способ сделать это проще/проще, возможно, превратив его в обещание, чтобы я мог использовать chai-as-обещал?
Примечание: _.hasOnly является обычным миксером подчеркивания.