所以,我有一个有问题的示例代码的plunker设置: http://plnkr.co/edit/KcpzxTnwFNnvhYXyPq6B?p=preview
我的问题是,我在home.controller.js中有一个函数
extension=php_openssl.dll
extension=php_sockets.dll
触发后,预计每5000毫秒调用一次PopularMovies.query(function(data) {
results = data;
findMovie(results[0]);
console.log("$interval Start", Date.now());
$interval(function() {
++idx;
console.log("$interval idx[" + idx + "]", Date.now());
console.log("results[idx % results.length]", results[idx % results.length]);
findMovie(results[idx % results.length]);
}, 5000);
});
。
为了测试这个,我在home.controller.spec.js文件中编写了一个测试:
findMovie()
我的期望是it('should rotate movies every 5 seconds', function() {
this.clock = sinon.useFakeTimers();
var myStub = sinon.stub(PopularMovies, 'query').callsFake(function(cb) {
cb(['tt0076759', 'tt0080684', 'tt0086190']);
});
$controller('HomeController', {
$scope: $scope,
$interval: $interval,
omdbApi: omdbApi,
PopularMovies: PopularMovies
});
$rootScope.$apply();
// should have a default movie
console.log("$scope", $scope);
console.log("$scope.result", $scope.result);
console.log("results[0].Title", results[0].Title);
expect($scope.result.Title).to.equal(results[0].Title);
// should update after 5 seconds
console.log(Date.now(), this.clock);
this.clock.tick(5000);
$interval.flush(5000);
console.log(Date.now(), this.clock);
console.log("$scope", $scope);
console.log("$scope.result", $scope.result);
console.log("results[1].Title", results[1].Title);
expect($scope.result.Title).to.equal(results[1].Title);
// should update after 5 seconds
this.clock.tick(5000);
$interval.flush(5000);
console.log("$scope", $scope);
console.log("$scope.result", $scope.result);
console.log("results[2].Title", results[2].Title);
expect($scope.result.Title).to.equal(results[2].Title);
// should return to default
this.clock.tick(5000);
$interval.flush(5000);
expect($scope.result.Title).to.equal(results[0].Title);
this.clock.restore();
});
和/或this.clock.tick(5000);
会增加计时器,而angular会更新$ scope.result。
在第一次调用时,$ scope更新。但是,任何后续计时器都无法从spec文件更新$ scope。
我在使用Jasmine之前已经编写了一次这些测试,我对$ scope更新没有任何问题。但是,我正试图过渡到Sinon,所以请帮我搞定!
答案 0 :(得分:0)
原来我遇到的问题是omdb.find服务的存根,并从Jasmine的Object.fn.calls.mostRecent()
转换为Sinon的Object.fn.args
,这不是没有问题的。有moreRecent()函数。我更改了代码以查看args数组中的最后一个arg。
在home.controller.spec.js中,我改变了
var args = _omdbApi_.find.args[0][0];
到
var args = _omdbApi_.find.args;
args = args[args.length - 1][0];
工作代码: https://www.postgresql.org/docs/10/static/sql-cluster.html