【发布时间】:2017-08-30 10:35:51
【问题描述】:
AngularJS 1.4.8
加载视图时,我在控制器中执行了以下方法。 Watcher 是注入控制器的工厂。方法.list()returns bluebird promise。
Watcher.list()
.then((response) => {
$scope.watchers = response;
})
.catch(notify.error);
我想像这样测试$scope.watchers:
it('watchers have been loaded', function () {
expect($scope.watchers.length).to.equal(2);
});
但收到以下错误:
Chrome 59.0.3071 (Linux 0.0.0) theApp watchersController watchers have been loaded FAILED
Error: expected 0 to equal 2
目前,sinon stub 已尝试模拟 Wacther.list() 响应,请查看下面的完整测试文件。
import moment from 'moment';
import sinon from 'auto-release-sinon';
import Promise from 'bluebird';
import ngMock from 'ng_mock';
import expect from 'expect.js';
import _ from 'lodash';
import '../watchersController';
describe('watchersController', function () {
let $httpBackend;
let $scope;
let $route;
let Watcher;
const init = function () {
ngMock.inject(function ($rootScope, $controller, _$httpBackend_, _$route_, _Watcher_) {
$scope = $rootScope;
$route = _$route_;
$httpBackend = _$httpBackend_;
Watcher = _Watcher_;
sinon.stub(Watcher, 'list', () => {
return Promise.resolve([
{ id: '123' },
{ id: '456' }
]);
});
$route.current = {
locals: {
currentTime: moment('2016-08-08T11:56:42.108Z')
}
};
$controller('WatchersController', {
$scope,
$route,
$uibModal: {}
});
$scope.$apply();
});
};
beforeEach(function () {
init();
});
afterEach(function () {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('watchers have been loaded', function () {
expect($scope.watchers.length).to.equal(2);
});
});
【问题讨论】:
标签: javascript angularjs sinon