首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用茉莉花测试角质服务(不是工厂)

用茉莉花测试角质服务(不是工厂)
EN

Stack Overflow用户
提问于 2016-09-14 14:16:12
回答 1查看 359关注 0票数 0

我一直在尝试使用Jasmine测试一个角服务,下面是教程,但是由于某些原因,它们的例子在这里行不通(他们建议使用angular.mock.inject()方法注入服务)。

我就是这样做的,但恐怕这不是我应该做的.

,这是“良好实践”吗?为什么注射无效?

基本上,我将服务导入到测试中,设置我的模块和$provide服务的依赖项,并将传递它的服务传递给通常要注入的.

总之,这里是:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
'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,
  });
};
EN

回答 1

Stack Overflow用户

发布于 2016-09-14 16:14:41

你不需要这样做

代码语言:javascript
复制
    import rolesService from './roles.service.js'; // it should be not included.
//Should be injected 

BEFOREEACH

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39492738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档