【发布时间】:2015-09-10 12:21:12
【问题描述】:
我正在尝试在 jasmine 中对 Angular 工厂进行单元测试,但我无法理解如何从我的数据库中获取实际响应。
我有以下工厂代码,它根据公司代码值检索包含公司信息的对象。
工厂工作正常,但我想在茉莉花中进行测试。
app.factory('adminOps',function($http, $log, $q){
return {
getByTicker: function(ticker){
return $http.post("http://localhost:3000/ticker", {"ticker": ticker})
.then(function(response){
if (typeof response.data === 'object') {
return response.data;
} else {
return $q.reject(response.data);
}
}, function(response) {
return $q.reject(response);
});
}
};
});
为了对此进行测试,我根据我找到的在线示例提供了以下 jasmine 代码。
describe('adminOps', function() {
var factory, http;
beforeEach(module('myApp'));
beforeEach(inject(function(_adminOps_, $httpBackend) {
factory = _adminOps_;
http = $httpBackend;
}));
it('Should retrieve company data', function(done) {
var testCompany = function(company) {
expect(company.name).toBe("Google Inc.");
};
var failTest = function(error) {
expect(error).toBeUndefined();
}
http.expectPOST('http://localhost:3000/ticker',{ticker:"GOOG"}).respond(200, {ticker:"GOOG"});
factory.getByTicker("GOOG")
.then(testCompany)
.catch(failTest)
.finally(done);
http.flush();
});
});
我收到了Expected undefined to be 'Google Inc.'。
如何致电我的工厂并测试我发送的股票代码参数的正确名称值?
更新:Koen 的代码可以正常工作。我发现如果你想在服务器上测试值,比如 rest api,那么你应该尝试像 frisby 这样的东西,它是基于 Jasmine 构建的。
【问题讨论】:
-
单元测试使用 mock $httpBackend。这个 mock $httpBackend 不发送任何请求。它恰好用于避免发送 http 请求。它只回答单元测试告诉它回答的内容。
标签: angularjs unit-testing jasmine karma-jasmine