我一直在使用AngularJS和Karma / Jasmine进行单元测试一段时间(几个月,我觉得这几乎让我老手)。我一直想要一种在我的Karma测试中制作可重复使用的函数的方法,但是我已经让自己无法做到这一点。
我最近也开始使用量角器,它提供端到端测试。在量角器中,有一个require语法将一个文件包含到另一个文件中,允许我们创建库函数。这非常方便,我想在Karma / Jasmine中有类似的东西。
我还没有找到量角器中存在的这种能力,但它在Karma中显然不存在。有没有人发现或实施过类似的能力?
答案 0 :(得分:1)
是的,按照jl的建议,我最终得到了这段代码,效果非常好。很明显,我的javascript知识是一个缺陷,我并没有真正考虑过这一切都存在于全球地址空间中。
首先,我创建了一个文件“base_controller.spec.js”。在这个文件中,我声明了一个全局对象:
var BaseController =
{
baseBeforeEach: function() {
// mock Application to allow us to inject our own dependencies
beforeEach(angular.mock.module('bProject'));
// create the custom mocks on the root scope
beforeEach(angular.mock.inject(function($rootScope, _$httpBackend_, SidebarService, $state, BreadcrumbService ){
//create an empty scope
scope = $rootScope.$new();
scope.$rootScope = $rootScope;
scope.$state = $state;
scope.breadcrumb = BreadcrumbService;
// we're just declaring the httpBackend here, we're not setting up expectations or when's - they change on each test
scope.httpBackend = _$httpBackend_;
// setup the project id to a known value
scope.setupSidebar = SidebarService.sidebar;
scope.setupSidebar.projectId = 2;
}));
},
baseAfterEach: function() {
afterEach(function() {
scope.$digest();
scope.httpBackend.verifyNoOutstandingExpectation();
scope.httpBackend.verifyNoOutstandingRequest();
});
}
};
然后,我在测试中使用BaseController:
describe( 'Risk functionality.', function() {
BaseController.baseBeforeEach();
BaseController.baseAfterEach();
describe( 'Risks list controller.', function() {
这个例子相当简单,尽管每个控制器上都有模拟标准。但我在每个控制器上都有一组标准测试,这个方法让我这样做。
需要注意的是你的业力配置中包含的顺序 - 您需要提前包含此文件,否则某些模块无法看到它。
我会给jl一个upvote,但这是一个评论,所以我不能!!