2015-10-19 156 views
0

我看過這個問題已發佈,但似乎無法解決錯誤。我試圖使用jquery-jasmine來返回一些假數據,並且在嘗試加載json文件時無法通過404錯誤。我正在使用yeoman來支撐我的角度計劃項目。將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

我與自耕農,Angularjs-杯和jQuery的茉莉花具有相同的設置同樣的404問題。 我解決它在2路,

  • 基本路徑是不是在我的人緣的配置設置。
  • json文件的路徑最初沒有通過業力加載,所以他們永遠找不到。

所以我加入了文件加載行:

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

這是一個由自耕農建有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/', 
}