Jasmine和angularjs,不能存根$httpBackend用于服务

前端之家收集整理的这篇文章主要介绍了Jasmine和angularjs,不能存根$httpBackend用于服务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
查询$httpBackend后我似乎无法返回预期的结果,我不知道测试有什么问题.你能看看这个失败的最小例子吗?

链接演示

http://jsfiddle.net/paos/kTNF5/

茉莉花输出

  1. query() Expected [ ] to equal [ { hello : 'world' } ].

依赖资源

  1. <script src="https://raw.github.com/pivotal/jasmine/master/lib/jasmine-core/jasmine.js"></script>
  2. <script src="https://raw.github.com/pivotal/jasmine/master/lib/jasmine-core/jasmine-html.js"></script>
  3.  
  4. <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
  5. <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular-resource.min.js"></script>
  6. <script src="http://code.angularjs.org/1.0.1/angular-mocks-1.0.1.js"></script>

测试javascript

  1. var mod = angular.module('mod',['ngResource']);
  2.  
  3. mod.factory('Brief',function($resource) {
  4. var Brief = $resource('http://some_test/:id');
  5. return Brief;
  6. });
  7.  
  8. beforeEach(function() {
  9. module('mod');
  10.  
  11. inject(function($injector) {
  12. resource = $injector.get('$resource');
  13. $httpBackend = $injector.get('$httpBackend');
  14. Brief = $injector.get('Brief');
  15. });
  16.  
  17. });
  18.  
  19. afterEach(function() {
  20. $httpBackend.verifyNoOutstandingExpectation();
  21. $httpBackend.verifyNoOutstandingRequest();
  22. });
  23.  
  24. describe("Brief",function() {
  25. it("query()",function() {
  26. var getRequest = 'http://some_test';
  27. var fakeGetResponse = [{
  28. "hello": "world"}];
  29.  
  30. $httpBackend.when('GET',getRequest).respond(fakeGetResponse);
  31.  
  32. var briefs = Brief.query();
  33. expect(briefs).toEqual(fakeGetResponse);
  34. $httpBackend.flush();
  35. });
  36. });
  37.  
  38.  
  39. // KICK OFF JASMINE
  40. var jasmineEnv = jasmine.getEnv();
  41. var trivialReporter = new jasmine.TrivialReporter();
  42.  
  43. jasmineEnv.addReporter(trivialReporter);
  44.  
  45. jasmineEnv.specFilter = function(spec) {
  46. return trivialReporter.specFilter(spec);
  47. };
  48.  
  49. jasmineEnv.execute();​

谢谢!

你几乎就在那里,但你的测试中仍有2个问题:

>在$httpBackend被刷新之前验证了期望.它是$httpBackend.flush();模拟传入的响应
>在您的期望中,您正在比较对象实例(而不是它们的值),但AngularJS $资源将创建一个新数组,如https://stackoverflow.com/a/11966512/1418796中所述.您需要比较对象的值而不是引用.这样做的一种方法是:expect(angular.equals(briefs,fakeGetResponse)).toBeTruthy();

最后这里有一个测试传递的jsFiddle:http://jsfiddle.net/VFqFU/

猜你在找的Angularjs相关文章