Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角组件中的单元测试解析块_Angularjs_Unit Testing_Jasmine_Karma Jasmine - Fatal编程技术网

Angularjs 角组件中的单元测试解析块

Angularjs 角组件中的单元测试解析块,angularjs,unit-testing,jasmine,karma-jasmine,Angularjs,Unit Testing,Jasmine,Karma Jasmine,有人知道如何对路由组件中的块项进行单元测试解析吗?如果有人可以在resolve块中测试CoursedDetails作为示例,那就太好了 (function() { 'use strict'; angular .module('writingsolutionsComponents') .component('courseSettings', { bindings: { newCourseFor

有人知道如何对路由组件中的块项进行单元测试解析吗?如果有人可以在resolve块中测试CoursedDetails作为示例,那就太好了

(function() {
    'use strict';

    angular
        .module('writingsolutionsComponents')
        .component('courseSettings', {
            bindings: {
                newCourseForm: '<',
                courseDetails: '<',
                timezones: '<',
                citations: '<',
                disciplines: '<'
            },
            templateUrl: 'course-settings/course-settings.html',
            controller: 'CourseSettingsController'
        })
        .config(stateConfig);

    stateConfig.$inject = ['$stateProvider'];

    function stateConfig($stateProvider, $urlRouterProvider) {
        $stateProvider.state('course-settings', {
            parent: 'app',
            url: '/:courseId/course-settings',
            data: {
                pageTitle: "Hello World"
            },
            views: {
                'content@': {
                    component: 'courseSettings'
                }
            },
            resolve: {
                courseDetails: function(CourseService, $stateParams) {
                    return CourseService.get($stateParams.courseId);
                },
                timezones: function(TimezoneService) {
                    return TimezoneService.getTimeZones();
                },
                citations: function(CitationService) {
                    return CitationService.getCitations();
                },
                disciplines: function(DisciplineService) {
                    return DisciplineService.getAllDisciplines();
                }


                }
            }
        });
    }
})();
不要测试您的框架。这里这意味着不要测试ui路由器,它可以正常工作。具体来说,我们知道它将调用已注册的解析函数

如果您希望测试resolve函数本身,它实际上非常简单。我们只需要使该函数可用于测试。我们实际上可以在不启动web浏览器或做任何花哨的事情的情况下测试此功能

下面是一个使用名为blue tape*的测试库使用NodeJS运行测试的示例,如果必须,您可以将其调整为使用Jasmine

// tests.js
const test = require("blue-tape");

test("courseDetails resolve retrieves the course based on route/:courseId", async t => {
  // arrange
  const courses = [{courseId: "32432535", title: "Communication"}];
  const mockCourseService = {
    get(id) {
      return Promise.resolve(courses.find(course => course.id === id));
    }
  };
  const mock$stateParams = {courseId: "32432535"};

  // act
  const result = await courseDetails(mockCourseService, mock$stateParams);

  // assert
  t.equal(result.courseId, courses[0].courseId);
});
要使其工作,请运行

npm install --save-dev blue-tape
然后跑

node test.js
好处是,您的测试不依赖于ui路由器,甚至不依赖于AngularJS,它只测试您所关心的内容、业务逻辑

注意,这个测试本身有点随意

*我在这里使用blue tape而不是tape,因为它使异步函数的测试变得非常简单,因为它可以自动处理任何返回启用的函数。

可能重复的
node test.js