例如,我见过这样的函数,使用起来很方便:
myFunction(data).
success(function() { // success! }).
fail(function() { // fail! });
Run Code Online (Sandbox Code Playgroud)
我看不出如何实现这一点的明显方法.在查看Node.js文档之后,这是我悲伤的尝试:
var EventEmitter = require('events').EventEmitter;
var testEmitter = function(x) {
var e = new EventEmitter();
if (x) {
e.emit('success', 'got: ' + x);
} else {
e.emit('failure', 'no x passed')
}
return e;
}
Run Code Online (Sandbox Code Playgroud)
显然,当你试图调用它时,这将不起作用:
testEmitter('hello').
success(console.log('success!')).
failure(console.log('failure!'));
// TypeError: Object #<EventEmitter> has no method 'success'
Run Code Online (Sandbox Code Playgroud)
实现这种模式的最佳方法是什么?
我正在将单元测试添加到用C#/ ASP.NET/webforms编写的大型遗留代码库中.我们正在使用MOQ和XUnit.我们已经能够使用以下语法模拟查询字符串值:
Mock<HttpRequestBase> request = new Mock<HttpRequestBase>();
NameValueCollection queryStringParams = new NameValueCollection();
queryStringParams.Add("name", "Fred Jones");
request.Setup(x => x.QueryString).Returns(queryStringParams);
Run Code Online (Sandbox Code Playgroud)
这允许此代码正常工作:
string name = _mockRequest.QueryString["name"];
Run Code Online (Sandbox Code Playgroud)
问题是在整个代码库中散布了很多调用来获取查询字符串变量或表单形式的变量:
string name = HttpContext.Current.Request["name"];
Run Code Online (Sandbox Code Playgroud)
索引器显然查看了所有各种集合:查询字符串,表单值,cookie和服务器变量.我不想通过重构生产代码来使用这些集合中的单个集合来引入许多潜在的副作用.
有没有人知道在HttpRequest上模拟该索引器的方法?