以下测试通过:
admin.controller.js
angular
.module('mean-starter')
.controller('AdminController', AdminController);
function AdminController(User, Auth, $state) {
var vm = this;
User
.list()
.success(function(data) {
vm.users = data;
})
.error(function() {
console.log('Problem getting users.');
});
vm.delete = function(id) {
User
.delete(id)
.success(function(data) {
if (Auth.getCurrentUser()._id === id) Auth.logout(); // deleting yourself
else $state.reload();
})
.error(function() {
console.log('Problem deleting user.');
});
};
}
admin.controller.spec.js
describe('AdminController', function() {
var AdminController, $httpBackend;
beforeEach(module('mean-starter'));
beforeEach(module('templates'));
beforeEach(inject(function($controller, $rootScope, _$httpBackend_) {
$httpBackend = _$httpBackend_;
AdminController = $controller('AdminController');
}));
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('gets users', function() {
$httpBackend
.expectGET('/users')
.respond('foo');
$httpBackend.flush();
});
});
我没想到会这样。这是我期望发生的事情:
- 控制器在
beforeEach
. User.list()
运行。$http
尚未被 覆盖,因此$httpBackend
请求正常发出。$httpBackend.expectGET('/users').respond('foo')
预计GET /users
。并说,“如果我收到那个请求,我会用 'foo' 回应”。$httpBackend.flush()
说“为收到的任何请求发送定义的响应$httpBackend
。”.expectGET
失败是因为它没有收到它的请求(请求发生在预期之前)。.flush()
抛出一个错误,因为没有什么要刷新的。
我没有得到我期望的结果,所以我上面的逻辑一定是错误的——它是什么?