gpt4 book ai didi

javascript - 向 jasmine 测试注入(inject)实用服务

转载 作者:行者123 更新时间:2023-12-03 06:03:14 27 4
gpt4 key购买 nike

这个问题不是关于包含要测试的服务或提供替换服务的模拟。

情况:

我想测试的工厂是关于解析一组属性并通过 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() 是一个简单的方法,它从一些仅在执行测试时注入(inject)的常量中读取数据。这可能很重要,我不想异步加载它们。

问题:

Jasmine 框架的工作流程非常不直观,它首先运行并初始化所有描述 block ,然后再运行 beforeEach。顺序写在评论里了。

在数据循环运行之前我没有机会注入(inject) UtilService 吗?

感谢您帮助我!

最佳答案

如果你的 UtilService 是一个工厂,你可以在每个测试之前将服务注入(inject)到每个测试中

beforeEach(function() {
module('app');

var UtilService;

inject(function(_UtilService_) {

UtilService = _UtilService_;

});
});

按照 jasmine 设置测试的方式,只要您在 Karma 配置中正确加载所有依赖项,您就不必使用 $injector 来拉取服务。

由于下划线可能有点令人困惑,Angular 将提供下划线服务,以便您每次都可以创建一个新实例。

关于javascript - 向 jasmine 测试注入(inject)实用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39664260/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com