Sim*_*max 55 angularjs restangular
我在我的角应用中定义了以下服务:
services.factory('MyService', ['Restangular', function (Restangular) {
return {
events : { loading : true },
retrieveQuotes : function() {
return Restangular.all('quotes').getList().then(function() {
return { hello: 'World' };
});
}
};
}]);
Run Code Online (Sandbox Code Playgroud)
我正在编写以下规范来测试它:
describe("MyService", function () {
beforeEach(module('MyApp'));
beforeEach(module("restangular"));
var $httpBackend, Restangular, ms;
beforeEach(inject(function (_$httpBackend_, _Restangular_, MyService) {
ms = MyService;
$httpBackend = _$httpBackend_;
Restangular = _Restangular_;
}));
it("retrieveQuotes should be defined", function () {
expect(ms.retrieveQuotes).toBeDefined();
});
it("retrieveQuotes should return array of quotes", function () {
$httpBackend.whenGET("internalapi/quotes").respond({ hello: 'World' });
ms.retrieveQuotes();
$httpBackend.flush();
});
});
Run Code Online (Sandbox Code Playgroud)
每当我运行测试时,第一个测试通过,但第二个测试产生错误:
Error: Unexpected request: GET /internalapi/quotes
我究竟做错了什么?
编辑:
原来,我已经配置Restangular是这样的... RestangularProvider.setBaseUrl("/internalapi");.但我正在打电话给internalapi/quotes.注意缺少"/".一旦我添加斜线/internalapi/quotes一切都很好:)
Jon*_*mbo 56
您需要告诉$ httpBackend以期待GET请求.
describe("MyService", function () {
beforeEach(module('MyApp'));
beforeEach(module("restangular"));
var Restangular, ms;
beforeEach(inject(function (_Restangular_, MyService) {
ms = MyService;
Restangular = _Restangular_;
}));
it("retrieveQuotes should be defined", function () {
expect(ms.retrieveQuotes).toBeDefined();
});
it("retrieveQuotes should return array of quotes", inject(function ($httpBackend) {
$httpBackend.whenGET("internalapi/quotes").respond({ hello: 'World' });
//expect a get request to "internalapi/quotes"
$httpBackend.expectGET("internalapi/quotes");
ms.retrieveQuotes();
$httpBackend.flush();
}));
});
Run Code Online (Sandbox Code Playgroud)
或者你可以把你respond()的expectGET().我更喜欢以我的方式表达我的whenGET()声明,beforeEach()我不必在每个测试中定义响应.
//expect a get request to "internalapi/quotes"
$httpBackend.expectGET("internalapi/quotes").respond({ hello: 'World' });
ms.retrieveQuotes();
$httpBackend.flush();
Run Code Online (Sandbox Code Playgroud)
gro*_*eck 17
我和你们有同样的问题.我的解决方案是在.expectGET的URL参数的开头添加一个'/'.使用你的例子:
$httpBackend.expectGET("/internalapi/quotes").respond({ hello: 'world'})
Run Code Online (Sandbox Code Playgroud)
祝你好运
| 归档时间: |
|
| 查看次数: |
60606 次 |
| 最近记录: |