Angularjs 角组件中的单元测试解析块
有人知道如何对路由组件中的块项进行单元测试解析吗?如果有人可以在resolve块中测试CoursedDetails作为示例,那就太好了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
(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