如何让jasmine测试加载数据并按正确的顺序执行
How to get jasmine tests to load data and execute in the right order
我正在使用Jasmine(2.3.2)和Protractor(2.5.1)进行UI测试。我需要加载数据,并为该数组中的每个项生成测试。我有一个函数(checkItem
),它为每个项目创建一个新的describe
函数,并检查该对象的某些属性。这是我的代码的一个非常简化的版本,在此之前还有其他测试。
如果我在describe
语句中调用checkItem
,那么itemsArr
还没有定义。所以我不知道如何加载数据并根据这些数据创建动态测试。
var data = require('get-data'); //custom module here
describe('Test', function() {
var itemsArr;
beforeAll(function(done) {
data.get(function(err, result) {
itemsArr = result; //load data from module
done();
});
})
//error: Cannot read property 'forEach' of undefined
describe('check each item', function() {
itemsArr.forEach(function(item) {
checkItem(item);
});
});
function checkItem (item) {
var itemName = item.name;
describe(itemName, function() {
console.log('describe');
//this doesn't fire when 'should check item' is called
it('should work', function() {
console.log('it');
expect(false).toBeTruthy();
});
});
}
});
UPDATE:当我这样更改代码时,问题是一样的,所以可能有另一种方法来加载数据,而不是使用beforeAll
/beforeEach
beforeAll(function() {
itemsArr = [
{
name: 'apple'
},
{
name: 'orange'
},
{
name: 'banana'
}
]
});
您得到的是一个未定义的itemsArr
,因为内部describe
中的代码在进程的早期执行,并且在beforeAll
完成获取数据之前执行。用it
代替describe
将使其等待beforeAll
完成。
现在it
的问题是不能嵌套it
s-jasmine不会执行内部its,请参阅此相关问题。
如果你不想动态地创建内部it
,而只是在父it
中实现你的期望——这是可行的。工作样品:
describe('Test', function() {
var itemsArr;
beforeAll(function(done) {
itemsArr = [
{
name: 'apple'
},
{
name: 'orange'
},
{
name: 'banana'
}
];
done();
});
it('should check each item', function() {
itemsArr.forEach(function(item) {
expect(false).toBeTruthy();
});
});
});
它产生3个Expected false to be truthy
故障。
我仍然认为,如果我们尝试使用Protractor的控制流,我们可能会有更好的解决方案。
相关文章:
- javascript函数和代码隐藏函数的执行顺序
- Node.js:多个然后'It’执行顺序不正确
- 不同'单击'不同脚本中的回调:我可以控制执行顺序吗
- 代码混淆的执行顺序
- Javascript执行顺序错误
- Javascript执行顺序和回调
- 奇怪的javascript代码执行顺序
- for 循环/递归中的执行顺序
- JavaScript 中的执行顺序问题
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 控制承诺执行顺序
- 我可以信任 JavaScript 中声明中的执行顺序吗?
- 使用webcomponenetsjs的HTMLImports以意外的执行顺序加载导入-firefox
- 确保执行顺序:javascript
- Javascript代码的执行顺序
- 保证HTML表单提交和jQuery onclick的执行顺序
- 在ASP.Net中运行javascript时的执行顺序
- jQuery函数执行顺序
- Javascript中绑定到事件的函数的执行顺序
- 淘汰js可观察扩展的执行顺序是什么