2016-09-14 95 views
0

我一直在嘗試使用茉莉花以下教程測試的角度服務測試的角度服務(不出廠),但由於某種原因,他們的例子並沒有這樣做的工作(他們建議使用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這一

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

請檢查'因果報應files'財產.config.js並確保列表中包含相應的文件。 –

+0

我已將karma.config.js文件添加到描述中。正如你所看到的,app-gouvernementales.js文件已經在文件列表中,並且是應用程序的入口點。理論上,根據我過去測試過的所有其他應用程序,我應該能夠使用'angular.mock.inject'將我的服務注入到測試中,但出於某種奇怪的原因,它只是贏得了' t work ... – justinledouxweb