我创建了此中间件,next()
当通过定义路由的唯一参数时,该中间件将返回queryItems
。
我最近发现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()
})
})
这是执行此操作的正确方法吗?有什么方法可以使它变得更简单/更容易,也许将其转换为promise,以便我可以使用chai-as-promise?
注意:_. hasOnly是自定义的下划线mixin。
我喜欢Sinon进行以下测试:
// first test
...
var res = httpMocks.createResponse()
var spy = sinon.spy();
middleware.hasOnlyQuery(["foo"])(req, res, spy);
expect(spy.calledWithExactly()).to.be.true;
// second test
...
expect(spy.calledWithExactly('route')).to.be.true;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句