如何编写一个Jasmine测试套件,该套件依赖于另一个套件中的变量?(Jasmine 1.3)

3

我正在编写Protractor测试套件,并且需要测试从另一个套件生成的页面使用的内容。我只能想出一种编写测试的方法,但这似乎不是一个好的编写方式:

var someStuffToSave = [];

describe('description of first thing', function(){
    it('should generate some things', function(){
        someStuffToSave.push(generateSomeThings());
    });
    it('should generate some things', function(){
        someStuffToSave.push(generateSomeThings());
    });
    it('should generate some things', function(){
        someStuffToSave.push(generateSomeThings());
        element(by.id("something")).getText().then(function(){
          for(var i = 0; i < someStuffToSave.length; i++) (function(){
             var idx = i;
             describe('thing analysis' + idx, function(){
                it('should be something', function(){
                   expect(someStuffToSave[idx]).toEqual(true);
                });
             });
          })();
      });
    }); 
});

我更希望像这样做,但问题在于第二个describe的内部会立即执行,而不会等待第一个describe完成。

var someStuffToSave = [];
describe('description of some thing', function(){
    it('should generate some things', function(){
        someStuffToSave.push(generateSomeThings());
    });
    it('should generate some things', function(){
        someStuffToSave.push(generateSomeThings());
    });
    it('should generate some things', function(){
        someStuffToSave.push(generateSomeThings);
    }); 
});
describe('analyzing things', function(){
    for(var i = 0; i < someStuffToSave.length; i++)function(){
        var idx = i;
        describe('thing ' + idx, function(){
            it('should be something', function(){
                expect(someStuffToSave[idx]).toEqual(true);
            });
        });
     }
});

有没有一种方法可以在第一个描述中不使用' then '


你看过这个Protractor问题吗? - glepretre
我还没有尝试过,但我尝试将它们都嵌套在一个描述中。稍后今天我会再进行更多实验。 - Eric Wooley
你还在试图解决这个问题吗?如果我能更好地理解你的意图,我认为我可以提供帮助。你能提供一个更具体的例子吗?在你上面的例子中,最初的描述块有三个规范(它...),但是它们都没有断言任何内容,而似乎是在做某些事情。通常,你会在before块中执行操作,然后在it块中断言之前执行的操作是否产生了预期的输出或副作用。你的例子对我来说太抽象了,我不明白为什么你没有遵循这种模式。 - Kenneth Baltrinic
实际测试涉及几千行代码,因此我试图将其缩短为一个示例。在真正的程序中,在初始的it语句中,有很多断言,并且同时它们正在收集关于网站的信息以供稍后进行测试。最终我做的是将第二个测试嵌套到第一个测试结束时解决的promise之一中。在我看来,这不是非常漂亮,但它能够工作。 - Eric Wooley
1个回答

1
一般来说,在Jasmine的'describe'块内,不应该进行任何设置登录操作。那里的代码在Jasmine设置测试时运行,并不按正确顺序执行。如果你将for循环放在一个'it'块内,你的第二个方法应该可以工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接