我创建了一个执行以下任务的bash脚本:
origin/master为master#2是否为真;master之上origin/master,如果#2是假的代码如下:
#!/bin/sh
local_branch=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD)
remote_branch=$(git rev-parse --abbrev-ref --symbolic-full-name @{u})
remote=$(git config branch.$local_branch.remote)
echo "Fetching from $remote..."
git fetch $remote
if git merge-base --is-ancestor $local_branch $remote_branch; then
echo 'Fast-forward is possible. Merging...'
git merge --ff-only $remote_branch
else
echo 'Fast-forward is not possible. Rebasing...'
git rebase --preserve-merges $remote_branch
fi
Run Code Online (Sandbox Code Playgroud)
我测试了几次它似乎工作,但我对这部分不是很有信心git merge-base.我知道快速合并背后的理论,它似乎是正确的使用master和origin/master作为参数merge-base,但我不是Git专家.
所以我问:是否正确检查是否可以在执行提取后进行快进合并?
我正在为Angular指令编写一些测试,我需要将用户输入模拟到输入字段中.我试着这样做:
element.find('input').val('some value').trigger('input');
Run Code Online (Sandbox Code Playgroud)
但它不起作用.触发change也不起作用.我知道我可以直接访问元素范围element.scope()并更改它,但更改输入值并让Angular执行数据绑定似乎更自然.
对于它的价值,我已经input(name).enter(value)从Angular ngScenario中检出了它,它似乎和我一样:
...
input.val(value);
input.trigger(event || (supportInputEvent ? 'input' : 'change'));
...
Run Code Online (Sandbox Code Playgroud)
我错过了什么?在这种情况下,有更好的方法来测试用户输入吗?
(我制作了一个jsFiddler脚本来说明这个问题)
UPDATE
我认为需要澄清一些.我不是试图改变DOM以及Angular领域之外的范围本身.我有一个指令,它将输入框绑定到指令范围的属性.我正在编写自动化测试以确保指令执行它应该做的事情,并且一个测试应该做的是模拟一些输入以便指令范围得到更新并且我可以断言在该输入上执行某些行为.正如我之前提到的,我可以通过使用来改变测试代码的指令范围element.scope(),但我宁愿改变输入的值,让Angular做它的事情.
我已经阅读了一篇关于使用范围的一些AngularJS陷阱的文章,并且它声明你不应该在表达式中使用函数,并且我理解每次框架认为需要时都可以评估表达式(这可能会发生很多)并且一遍又一遍地调用昂贵的功能是低效的.但是,如果该函数仅基于已经加载到范围中的值进行一些计算呢?例如,假设我有一个具有3个不同属性的范围,并且某些状态由这些属性值的组合决定.我可以在函数中计算该状态:
$scope.state = function() {
return prop1 && prop2 && prop3;
};
Run Code Online (Sandbox Code Playgroud)
并从表达式中调用该函数.另一种方法是每次更改每个属性时调用该函数,以便缓存状态值:
$scope.prop1 = someValue;
$scope.state = getState();
...
$scope.prop2 = someOtherValue;
$scope.state = getState();
...
$scope.prop3 = yetAnotherValue;
$scope.state = getState();
Run Code Online (Sandbox Code Playgroud)
在这种情况下直接从表达式调用函数真的很糟糕吗?如果是这样,是唯一可以缓存计算值的替代方法,可能是在许多不同的地方,还是我还缺少另一种方法?