簡體   English   中英

如何在模擬Angular服務中從JSON fixture中提取數據

[英]How to pull data from JSON fixture in mock Angular service

我創建了下面的模擬Angular服務來測試控制器。 當我運行我的測試時,我收到錯誤: Unexpected request: GET ./fixtures/stats.json

mock.players.service.js:

'use strict';

angular.module('mockPlayersService', [])
  .factory('playersService', ['$http', '$q',
    function($http, $q) {
      var playersService = {};

      playersService.stats = $http.get('./fixtures/stats.json');

      playersService.getStats = function() {
        var defer = $q.defer();
        defer.resolve(this.stats);
        return angular.extend({$promise: defer.promise}, this.stats);
      };

      return playersService;
    }]);

在我的控制器規范中是否需要做一些事情來告訴我的測試期望這個GET請求,和/或我是否需要在我的karma.config.js files數組中聲明fixtures路徑?

編輯:更多信息顯示我當前(工作)設置:

playersService.stats = {
  'firstName': 'John',
  'middleName': 'James',
  'lastName': 'Doe',
  'city': 'Cleveland',
  'state': 'OH',
};

playersService.getStats = function() {
  var defer = $q.defer();
  defer.resolve(this.stats);
  return angular.extend({$promise: defer.promise}, this.stats);
};

我只想將當前的playersService.stats對象移動到JSON fixture中。

根據您的方法,最簡單的方法是讓karma為您的夾具文件服務。 在你的karma.conf文件節中,你可以添加如下內容:

  { pattern:  './fixtures/*.json',
    watched:  true,
    served:   true,
    included: false }

我認為karma提供來自root的根文件,你可能需要使用你給$ http的url。

我不太明白你為什么要打擾MockService姊妹你真正的那個。 這似乎是一種非常重的方法。 更常見的事情是使用您的實際服務並模擬后端。 你的測試中有這樣的東西:

before(inject(function( $httpBackend, playersService) {
    o = playersService;
    back = $httpBackend;

  back.whenGET('/therealPath').respond({});


}));

你仍然需要一種方法來加載你的夾具文件,但你可以安裝karma-read-json然后按照這樣的模式:

var valid_respond = readJSON('./fixtures/stats.json');
$httpBackend.whenGET('/therealPath').respond(valid_respond);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM