2016-09-14 2 views
0

私はチュートリアルの後でJasmineを使ってAngularサービスをテストしようとしていましたが、何らかの理由で彼らの例はここでは機能しません(angular.mock.inject()メソッドを使ってサービスを注入することを推奨します) ...ユニットテストジャスミンを使用した角度サービス(工場ではない)

これは、私はそれが働いてしまった方法ですが、私は、これは、それが行われるべきかではないかと思います...

は、この「良い習慣」となっていますか?なぜ注射がうまくいかないのですか?

私は基本的に通常とにかく...

を注入することだろうか、それを渡すサービスをセットアップ私のモジュールと$provideサービスの依存関係、テストにサービスをインポートし、new、ここにある:

ここで
import rolesService from './roles.service.js'; 

describe('Roles',() => { 
    let RolesService; 
    let PermRoleStore; 
    let USER; 

    beforeEach(() => { 
    angular.mock.module('roles', ($provide) => { 
     $provide.constant('USER', { 
     roles: ['SOUTIEN_ORGANISME'] 
     }); 
     $provide.value('PermRoleStore', { 
     defineManyRoles: jasmine.createSpy(), 
     }); 
    }); 

    angular.mock.inject((_PermRoleStore_, _USER_) => { 
     PermRoleStore = _PermRoleStore_; 
     USER = _USER_; 

     RolesService = new rolesService(PermRoleStore, USER); 
    }); 
    }); 

    it('Setup should define the roles',() => { 
    RolesService.setup(); 
    expect(PermRoleStore.defineManyRoles).toHaveBeenCalled(); 
    }); 

    describe('authorize',() => { 
    it('should return true if authorized',() => { 
     expect(RolesService.authorize('SOUTIEN_ORGANISME')).toBe(true); 
    }); 

    it('should return false if the user it NOT authorized',() => { 
     expect(RolesService.authorize('NOT_AUTHORIZED')).toBe(false); 
    }); 
    }); 
}); 

ちょうど参照用karma.config.jsファイルです:

'use strict'; 

const stringify = require('stringify'); 
const babelify = require('babelify'); 

module.exports = (config) => { 
    config.set({ 
    basePath: '', 
    frameworks: ['browserify', 'jasmine-ajax', 'jasmine'], 

    files: [ 
     { pattern: 'build/gouvernementales/app-gouvernementales.config.json', watched: true, served: true, included: false }, 
     'build/gouvernementales/js/gouvernementales-libs.js', 
     'src/apps/gouvernementales/app-gouvernementales.js', 
     'src/apps/gouvernementales/**/*.spec.js', 
     'src/modules/**/*.spec.js', 
    ], 

    preprocessors: { 
     'src/apps/gouvernementales/app-gouvernementales.js': 'browserify', 
     'src/apps/gouvernementales/**/*.spec.js': 'browserify', 
     'src/modules/**/*.spec.js': 'browserify', 
    }, 

    browsers: ['PhantomJS'], 

    plugins: [ 
     'karma-phantomjs-launcher', 
     // 'karma-chrome-launcher', 
     'karma-jasmine-ajax', 
     'karma-jasmine', 
     'karma-browserify', 
     'karma-coverage', 
     'karma-mocha-reporter', 
    ], 

    browserify: { 
     debug: true, 
     transform: [ 
     babelify, 
     stringify, 
     ], 
    }, 

    helpers: [ 
     'src/spec/helpers/**/*.js', 
    ], 

    reporters: [ 
     'mocha', 
     'coverage', 
    ], 

    coverageReporter: { 
     dir: 'coverage/', 
     reporters: [ 
     { type: 'text-summary' }, 
     { type: 'html' }, 
     ], 
    }, 

    logLevel: config.LOG_DEBUG, 

    singleRun: false, 

    colors: true, 

    autoWatch: true, 
    }); 
}; 
+0

問題は、その後何ですか? –

+0

すべてのチュートリアルでは、あなたのサービスを 'angular.mock.inject()'メソッドの中に入れるべきだと言いますが、私の場合は動作しません。 – justinledouxweb

+0

私の例でやったやり方が「良い練習」であるかどうかわかりません... – justinledouxweb

答えて

0

あなたはリットルをする必要はありませんIKEこの1

import rolesService from './roles.service.js'; // it should be not included. 
//Should be injected 

BEFOREEACH

beforeEach(() => { 
    angular.mock.module(($provide) => { 

     $provide.constant('USER', { 
     roles: ['SOUTIEN_ORGANISME'] 
     }); 
     $provide.value('PermRoleStore', { 
     defineManyRoles: jasmine.createSpy(), 
     }); 

    }); 

    //you are mocking PermRoleStore and USER,so should be inject it here. 
//It will get available to your service 
//no need of import 

    angular.mock.inject((_rolesService_) => { 
     PermRoleStore = _rolesService_; 
    }); 
    }); 
+0

私の説明で述べたように、これはうまくいきません... – justinledouxweb

+0

カルマの 'ファイル'プロパティをチェックしてください.config.jsを開き、リストに含まれている対応するファイルを確認してください。 –

+0

karma.config.jsファイルを説明に追加しました。ご覧のとおり、app-gouvernementales.jsファイルは既にファイルのリストにあり、アプリケーションのエントリポイントです。理論的には、私が過去にテストした他のすべてのアプリケーションによれば、私は 'angular.mock.inject'を使ってテストに私のサービスを注入できるはずですが、何らかの奇妙な理由で、 ... – justinledouxweb

関連する問題