2015-10-19 3 views
0

Я видел этот вопрос, но не мог решить проблему. Я пытаюсь использовать jquery-jasmine для возврата некоторых поддельных данных, и я не могу пройти мимо ошибки 404 при попытке загрузить json-файл. Я использую йомана, чтобы поднять мой проект с угловатым глотком. Не стоит ли помещать json-файл в модуль вместе со спецификационным файлом? Где карма бежит, это где я должен положить json-файл? Я попытался использовать абсолютный путь для jasmine.getJSONFixtures(). FixturesPath, но все равно получить сообщение об ошибке. Я добавил «базу» на путь прибора, потому что увидел, что это зафиксировало ошибку в другом post, но это не сработало для меня. Есть идеи?jquery-jasmine не удалось загрузить файлы json

WARN [web-server]: 404: /base/src/app/home/home.fixture.json?_=1445293824062 
PhantomJS 1.9.8 (Mac OS X) homeController should have some resultsets FAILED 
    Error: JSONFixture could not be loaded: base/src/app/home/home.fixture.json (status: error, message: undefined) 
    undefined 

project/ 
    src/ 
    app/home 
     home.controller.spec.js 
     home.fixture.json 
     ... 
    gulp/unit-test.js 

karma.conf.js 
... 

karma.conf.js:

'use strict'; 

module.exports = function(config) { 

    config.set({ 
    basePath: '../', 
    autoWatch : true, 

    frameworks : ['jasmine'], 

    browsers : ['PhantomJS'], 

    plugins : [ 
     'karma-phantomjs-launcher', 
     'karma-chrome-launcher', 
     'karma-firefox-launcher', 
     'karma-safari-launcher', 
     'karma-jasmine' 
    ], 

    exclude : [ 

    ], 

    files : [ 

     // fixtures 
     { 
      pattern: 'src/**/*.fixture.json', 
      watched: true, 
      served: true, 
      included: false 
     } 
    ] 
    }); 
}; 

home.controller.spec.js

'use strict'; 

describe('homeController', function(){ 

    beforeEach(function() { 
     module('homeModule'); 
     var $httpBackend, scope, homeController, storageFactory; 
     module(function($provide) { 
      $provide.service('storageFactory', storageFactory); 
     }); 

     inject(function($rootScope, $controller, $injector) { 
      $httpBackend = $injector.get('$httpBackend'); 
      jasmine.getJSONFixtures().fixturesPath = 'base/src/app/home'; 
      $httpBackend.whenGET('http://localhost:3000/my/api/home').respond(
       getJSONFixture('home.fixture.json') 
      ); 
      scope = $rootScope.$new(); 
      homeController = $controller('homeController', { 
       $scope: scope 
      }); 
      storageFactory = $injector.get('storageFactory'); 
     }); 

    }); 


    it('should have some resultsets', function() { 
     $httpBackend.flush(); 
     expect(scope.result_sets.length).toBe(59); 
    }); 

}); 

ответ

2

Я имел такую ​​же установку с YEOMAN-Angularjs-глотка и Jquery-жасмин с такая же проблема 404. я решил его в 2 пути,

  • BasePath не была установка в моей карме конфигурации.
  • Путь к файлу json первоначально не был загружен кармой, поэтому их так и не нашли.

Так что я добавил строку в файле загрузки:

{pattern: path.join(conf.paths.src, '/mockjson/*.json'), 
watched: false, 
included: false, 
served: true} 

Это основная карма конфигурации, которая была построена Yeoman с 2 дополнительной линии:

var path = require('path'); 
var conf = require('./gulp/conf'); 
var _ = require('lodash'); 
var wiredep = require('wiredep'); 
function listFiles() { 
    var wiredepOptions = _.extend({}, conf.wiredep, { 
    dependencies: true, 
    devDependencies: true 
    }); 
    return wiredep(wiredepOptions).js 
    .concat([ 
     path.join(conf.paths.src, '/app/**/*.module.js'), 
     path.join(conf.paths.src, '/app/**/*.js'), 
     path.join(conf.paths.src, '/**/*.spec.js'), 
     path.join(conf.paths.src, '/**/*.mock.js'), 
     path.join(conf.paths.src, '/**/*.html'), 
     {pattern: path.join(conf.paths.src, '/mockjson/*.json'), watched: false, included: false, served: true} 
    ]); 
} 

module.exports = function (config) { 
    var configuration = { 
    files: listFiles(), 
    singleRun: true, 
    autoWatch: false, 
    basePath: '', 
    frameworks: ['jasmine', 'angular-filesort'], 
    angularFilesort: { 
     whitelist: [path.join(conf.paths.src, '/**/!(*.html|*.spec|*.mock).js')] 
    }, 
    ngHtml2JsPreprocessor: { 
     stripPrefix: 'src/', 
     moduleName: 'pagesBehindCouch' 
    }, 
    browsers: ['PhantomJS'], 
    plugins: [ 
     'karma-phantomjs-launcher', 
     'karma-angular-filesort', 
     'karma-jasmine', 
     'karma-ng-html2js-preprocessor' 
    ], 
    preprocessors: { 
     'src/**/*.html': ['ng-html2js'] 
    } 
    }; 
    config.set(configuration); 
}; 

Я думаю, pattern: 'src/**/*. fixture.json', возможно, не в местоположении src, которое вы так думаете. Пример, который действительно помог мне: Gunnar Hillert's Blog

0

В моем случае я загрузил файл environment-configuration.json, чтобы загрузить приложение AngularJS. Итак, я также должен был указать настройки прокси-сервера.

proxies: { 
    '/mockjson/': '/base/src/mockjson/', 
} 
Смежные вопросы