2
我有一个服务设置,它使我所有的AJAX调用。我想测试我的登录方法,该方法将AJAX POST $http.post
发送到特定的URL,该URL返回结果(登录通过或失败)的对象。这个结果是一个对象。我没有完全返回代码来测试服务,但我试图首先测试URL。这是它现在的样子:Angular Js - 用Jasmine返回一个对象的测试POST请求
'use strict';
describe('Service: Ajax', function() {
var service, httpBackend;
// load the service's module
beforeEach(module('mySampleApp'));
// instantiate service
beforeEach(inject(function (Ajax, _$httpBackend_) {
httpBackend = _$httpBackend_;
service = Ajax;
}));
it('Test AJAX call', function() {
httpBackend.expect('POST', 'http://myloginurl', {u: 'xyz', p: 'pass'}, { withCredentials: true})
.respond(201, 'success');
});
});
这就过去了。现在我试着把一个错误的URL,错误的用户名/密码,但它仍然通过!我如何测试这个?
UPDATE: 写得现在:
//Ajax is my AJAX service
it('should test the login AJAX call', inject(function (Ajax) {
httpBackend.expect('POST', 'http://myloginurl')
.respond(200, "[{ status: 200, //some more data }]");
httpBackend.flush();
Ajax.authenticate({u: 'xyz', password: 'pass' })
.then(function(data){
expect(data.status).toBe(200);
});
}));
我得到这个:
PhantomJS 1.9.7 (Linux) Service: Ajax should test the login AJAX call FAILED
Error: No pending request to flush !
blah blah...
我正在更新我的问题并添加我得到的响应。请检查一下! – 2014-09-29 11:30:15
另外,'httpBackend.expect(...)'这个AJAX调用是否正确? – 2014-09-29 11:33:26
不,httpBackend.expect(...)不会执行调用 - 它告诉httpBackend期待一个调用。 httpBackend.flush()然后处理所有的调用。在这两件事之间的某处,您需要调用执行ajax请求的函数。 – Fordio 2014-09-29 11:37:00