所以,我正在我的node.js应用程序上运行一些测试。
测试遍历我的所有模型并检查每个模型的暴露api。 it
调用仅检查公共模型,具体取决于模型的public
属性。
在it
调用之前,我希望在每次迭代时使用beforeEach
将一些测试数据传递给模型。不幸的是,由于异步调用(我猜),beforeEach
中的迭代器值保持不变。我猜测循环甚至在beforeEach
之前执行。我对每个模型进行了两次it
次调用,导致每个模型调用两次beforeEach
。
更新
我想我必须展示我的整个用例,因为这比我在这里问的要复杂一些。 Cody的解决方案似乎有可能,但它仍然无法帮助我的用例。这是因为我在循环中有一些条件只对某些模型运行测试而不是全部。此外,还有两个it
调用,意味着每次迭代循环都会调用beforeEach
两次。这是代码:
var models = {'Ate': {'property1': 'prop'}, 'Bat': {'property2': 'prop2'}, 'Cat': {'property3': 'prop3'}};
var modelConfigs = {'Ate': {'public': 'true'}, 'Bat': {'public': 'false'}, 'Cat': {'public': 'true'}};
describe('Given an array of model objects', function(){
for(var key in modelConfigs) {
var m = key;
var modelConfig = modelConfigs[m];
var model = models[m].definition;
var modelPlural = models[m].settings.plural;
if(modelConfig.public) { // Condition runs for only some models
beforeEach(function (done) {
var test = this;
var testKey = m;
console.log(testKey); //Output is always Cat.
done();
});
lt.describe.whenCalledRemotely('GET', '/api/' + modelPlural, function() {
it('should have status code 200', function() { //First it call
assert.equal(this.res.statusCode, 200);
});
it('should be sorted DESC by date', function() { //Second it call
var modelRes = this.res.body;
expect(modelRes).to.be.instanceOf(Array);
expect(modelRes).to.have.length.below(11);
console.log(modelRes.length);
if(modelRes.length > 0) {
for(var i=1; i< modelRes.length; i++) {
expect(modelRes[i-1]['date']).to.be.at.least(modelRes[i]['date']);
}
}
});
});
}
}
});
答案 0 :(得分:0)
以下代码有效,但我确信有更清晰的解决方案:
var models = {'a': 'a', 'b':'b', 'c':'c'}
var modelsArray = []
for(var key in models) {
modelsArray.push(key)
}
describe("Given models", function () {
var currModel, index, testKey, test
before(function() {
index = 0;
})
beforeEach(function() {
test = this;
testKey = modelsArray[index]
currModel = models[testKey]
index++
})
for(var i = 0; i < modelsArray.length; i++) {
it("Does whatever you need to test", function() {
console.log(testKey)
})
}
})