【发布时间】:2017-02-01 12:28:54
【问题描述】:
这个问题不是关于包含一个服务来测试或提供一个替代服务的模拟。
情况:
我想测试的工厂是关于解析一组属性并通过 getter 函数提供这些信息。下面的伪代码描述了现在正在发生的事情(令人惊讶的是它可以工作,尽管根据数据长度创建动态测试是相当棘手的。)
...
describe('fancyTest', function() {
// 1
beforeEach(function() {
// 7
module('app');
inject(function($injector) {
// 8
Factory = $injector.get('app.ToTestFactory');
UtilService = $injector.get('app.Util'); // bad, as to late...
});
});
// 2
describe('dataTest', function() {
// 3
// Goal: data = UtilService.getData('dataset1');
data = [{id:'test1'}, {id:'test2'}];
for (i = 0, l = data.length; i < l; i += 1) {
test(data[i]);
}
function test(properties) {
// 4
describe('datatest #' + i, function() {
var elem;
// 5
beforeEach(function() {
// 9
elem = new Factory(properties)
});
// 6
it('should provide the correct id', function() {
// 10
expect(elem.id()).toBe(properties.id);
});
...
});
}
}
...
}
UtilService.getData() 是一个简单的方法,它从一些仅在执行测试时注入的常量中读取数据。这可能很重要,我不想异步加载它们。
问题:
Jasmine 框架有一个非常不直观的工作流程,首先运行并初始化所有描述块,然后再运行 beforeEach。顺序写在 cmets 中。
在数据循环运行之前我没有机会注入 UtilService 吗?
感谢您帮助我!
【问题讨论】:
标签: javascript angularjs unit-testing jasmine karma-jasmine