I think I do everything the same way as in tutorials and there is weird bug. I want to mock $http in my LoginService and test it. Unfortunately there are some problems - it looks like it doesn't see $httpBackend functions. This is my LoginService:
app.factory('LoginService', function($http) {
//..
var validateUser = function(username, password){
$http.post('http://domain/api/login',
{
username: username,
password: password
})
.success(function (data) {
//...
});
};
return {
validateUser: validateUser,
getLoginState: getLoginState
};
});
And there is test for that validateUser function:
describe('LoginService', function() {
var httpBackend, LoginService;
beforeEach(module('app'));
beforeEach(inject(function ($httpBackend, _LoginService_) {
LoginService = _LoginService_;
httpBackend = $httpBackend;
}));
afterEach(function() {
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
});
it('changes loginState object when user exists', inject(function(){
data = {username: "ut_user", token: "123456"};
httpBackend.expectPOST('http://domain/api/login').respond(data);
LoginService.validateUser("user", "pass");
httpBackend.flush();
expect(LoginService.getLoginState().loggedIn).toBe(true);
}));
});
And there is error which was on httpBackend.verifyNoOutstandingExpectation(); and previously on httpBackend.flush():
ReferenceError: $ is not defined
//...
at Function.$httpBackend.verifyNoOutstandingExpectation (http://localhost:9876/base/node_modules/angular-mocks/angular-mocks.js:1563:38)
//...
I have in karma conf:
files: [
'node_modules/angular/angular.js',
'node_modules/angular-*/angular-*.js',
'js/**/*.js',
'spec/**/*.js'
],
Aucun commentaire:
Enregistrer un commentaire