我想使用如下所示的自定义模板hg log:
hg log --template '{node|short} {desc} [{date|age} by {author}]\'n --color=always
Run Code Online (Sandbox Code Playgroud)
这在默认的终端颜色不是很可读,所以例如我想使节点红色和desc绿色.我怎样才能做到这一点?在git中我可以像这样定义这种格式:
git log --pretty=format:'%Cred%h%Creset %Cgreen%s%Creset [%ar by %an]'
Run Code Online (Sandbox Code Playgroud)
在mercurial中类似的事情是否可能?
我真的很喜欢Ruby中的fakeweb在测试时用来伪造http请求的方式.是否有类似的库或Python的替代品?
我需要在Java中快速构建一个非常简化版本的类似html的标记语言的解析器.在python中,我会使用pyparsing库来执行此操作.Java有类似的东西吗?请不要建议已经在那里进行html解析的库,我的应用程序是一个学校作业,它将演示走过一个对象树并使用访问者模式序列化为文本,所以我不会在这里考虑现实世界的术语.基本上我在这里需要的只是标签,属性和文本节点.
默认情况下,当我运行一个包含未定义的给定/ when/then子句的新鲜场景时,该测试只是标记为未定义.没有给出关于实际上未定义的内容的进一步有用的消息.有没有办法改变这种行为,以获得更多信息究竟是什么未定义?
我正在尝试在Jenkins中建立持续集成以进行git流式开发.我以为我会创建三个工作来构建RPM包:用于master,develop和最新的发布分支.
问题在于最新的发布分支,因为我不确定是否可以设置构建以便Jenkins轮询我的git repo,并且只有在最新版本/*分支中发生更改时才进行构建.人们更常见的是克隆工作和核心分支名称,还是我打算做什么?
在我们的JavaScript开发团队中,我们采用了redux/react风格编写纯函数代码.但是,我们似乎无法对我们的代码进行单元测试.请考虑以下示例:
function foo(data) {
return process({
value: extractBar(data.prop1),
otherValue: extractBaz(data.prop2.someOtherProp)
});
}
Run Code Online (Sandbox Code Playgroud)
此函数调用取决于对其的调用process,extractBar并且extractBaz每个调用都可以调用其他函数.总之,他们可能需要data构造一个非平凡的模拟 参数来进行测试.
我们是否应该接受制作这样一个模拟对象的必要性,并且实际上在测试中这样做,我们很快发现我们有难以阅读和维护的测试用例.此外,它很可能会导致遍地测试同样的事情,作为单元测试process,extractBar并且extractBaz可能应该也可以写.通过foo接口测试由这些函数实现的每个可能的边缘情况是不实用的.
我们有一些解决方案,但并不真正喜欢任何解决方案,因为它们似乎都不是我们之前看到过的模式.
解决方案1:
function foo(data, deps = defaultDeps) {
return deps.process({
value: deps.extractBar(data.prop1),
otherValue: deps.extractBaz(data.prop2.someOtherProp)
});
}
Run Code Online (Sandbox Code Playgroud)
解决方案2:
function foo(
data,
processImpl = process,
extractBarImpl = extractBar,
extractBazImpl = extractBaz
) {
return process({
value: extractBar(data.prop1),
otherValue: extractBaz(data.prop2.someOtherProp)
});
}
Run Code Online (Sandbox Code Playgroud)
foo当依赖函数调用的数量增加时,解决方案2 非常快速地污染方法签名.
解决方案3:
只需接受这foo是一个复杂的复合操作并将其作为一个整体进行测试的事实.所有缺点都适用.
请提出其他可能性.我想这是一个功能编程社区必须以某种方式解决的问题.
javascript unit-testing functional-programming pure-function
假设我在Redux中编写应用程序,我的任务是使用第三方库添加日志记录.其API如下:
function createLogger(token) {
// the logger has internal state!
let logCount = 0;
return {
log(payload) {
logCount++; // modify local state
fetch('/someapi', { // ship payload to some API
method: 'POST',
body: payload
});
}
};
}
Run Code Online (Sandbox Code Playgroud)
然后我会使用这样的库:
let logger = createLogger('xyz');
logger.log('foobar');
Run Code Online (Sandbox Code Playgroud)
我绝对想在应用程序初始化期间只创建一次logger实例.但问题是:我在哪里存储记录器实例?
第一个是将它放在商店的某个地方.但这是个好主意吗?正如我在代码中演示的那样,logger对象是有状态的,它在闭包中存储了一个计数器.我没有像使用不可变对象那样获得新实例.我们知道,只应通过纯缩减器函数修改状态.
其他可能性是在redux中间件闭包中的某处创建实例,或者只创建一个全局变量,这在可测试性方面显然是邪恶的.
是否有最佳实践(我认为)相当常见的情况?
我正在将我的构建系统从具有自定义任务的Grunt移动到Webpack.至于JavaScript模块,它工作得很好,但我不太确定如何使用我的Sass样式表.
我依赖于我的AMD模块中的Sass文件,Webpack可以从中读取并生成bundle.css.但我最好让我的构建管道使用spritesmith生成精灵,然后将图像复制到构建目录并使用Sass mixins生成正确的CSS规则.
我在SO和谷歌上都研究了很多,但没有找到任何人做类似的情况.我应该只使用网络包吗?或者我应该有单独的Grunt任务观看图像,生成精灵然后运行Webpack吗?
我正在尝试调试一个应用程序,这对于ajax请求非常重(至少每秒一次).Firebug在其控制台中显示每个请求,这使得很难看到我自己的console.log打印.是否可以暂时过滤出现在控制台中的ajax请求?
虽然很清楚如何使用===的如数字运算符是有用的(0,null并且undefined全部为falsy值,这可能会导致混乱),我不知道是否有使用效益===字符串比较.
我的一些队友使用这个操作符进行所有比较,但它真的有意义吗?是否至少有一些轻微的性能影响?