我正在尝试使用CasperJS编写一个测试,其中按下输入中的Enter键是页面的触发器,用于输入文本,否则键入输入.
CasperJS测试的缩写/简化版本:
casper.start('http://localhost:3000/input-demo', function() {
this.sendKeys('#demo-input', 'demo text');
this.sendKeys('#demo-input', '\uE007');
this.test.assertEquals(this.getHTML('#stage'), 'input demo');
});
casper.run();
Run Code Online (Sandbox Code Playgroud)
(我们在哪里运行casperjs test this-test.js)
我已经验证sendKeys了将文本输入到输入中,但该文本从未显示在#stage元素中.按键的"vanilla"PhantomJS实现工作正常,webpage.sendEvent('keypress', '\uE007')导致页面上的事件处理程序触发.查看源代码casper.sendKeys,我看到它委托给sendEventCasper实例的PhantomJS实例(即当前版本的casper.js中的第1613行).
有任何想法吗?谁有这些钥匙才能在CasperJS测试中工作?
为了在我的AngularJS应用程序中保持解耦,我有一个validationService不同的控制器可以调用来执行验证.实际上,validate()给定控制器中的方法应该只是$emit一个事件(request:validate例如)服务将侦听的事件 - 但它似乎没有$rootScope接收到发出的事件.例如:
angular.module('mine').controller('CommitController', [
'$scope',
function($scope) {
$scope.validate = function() {
$scope.$emit('request:validate');
};
}
]);
angular.module('mine.services').factory('validationService', [
'$rootScope',
function($rootScope) {
$rootScope.$on('request:validate', function(e) {
console.log('received the request:validate event - go ahead with validation');
});
}
]);
Run Code Online (Sandbox Code Playgroud)
但$on('request:validate')永远不会发火$rootScope.难道$rootScope没有收到子作用域发出的事件?如何$rootScope倾听事件是否有些怪癖?
对此有一种"更有角度"的方法吗?控制器应该直接打电话validationService吗?如果该事件$broadcast从$rootScope开始说起?