Javascript 如何在jasmine中抽象和重用descripe()块?

Javascript 如何在jasmine中抽象和重用descripe()块?,javascript,angularjs,unit-testing,jasmine,protractor,Javascript,Angularjs,Unit Testing,Jasmine,Protractor,我在一个应用程序上工作,该应用程序处理特定类型文档上的CRUD。因此,我们经常希望根据一组值测试该文档的一致性。我有一个descripe()块,里面有it(),它正在测试文档的每个字段 我想使其可重用,但简单地围绕描述块包装函数会导致计时问题,并且在包装函数中的测试之前,以下测试运行得太早 有这样做的模式吗?这应该是一个承诺吗? 我应该让它成为一个匹配者吗?doctobequalto()?我还没有在matchers中看到它()的使用,它似乎不是合适的地方 我想我缺少了一个共同的模式。你能帮忙吗

我在一个应用程序上工作,该应用程序处理特定类型文档上的CRUD。因此,我们经常希望根据一组值测试该文档的一致性。我有一个descripe()块,里面有it(),它正在测试文档的每个字段

我想使其可重用,但简单地围绕描述块包装函数会导致计时问题,并且在包装函数中的测试之前,以下测试运行得太早

有这样做的模式吗?这应该是一个承诺吗? 我应该让它成为一个匹配者吗?doctobequalto()?我还没有在matchers中看到它()的使用,它似乎不是合适的地方

我想我缺少了一个共同的模式。你能帮忙吗

非常感谢

编辑:请求的代码示例:

function compareDocs(targetData, timeout){
        describe('the doc should contain : ', function(){
            it('The amount field should be : "' + targetData.amount + '". ', function(){
                expect(element(by.css(selector)).getAttribute('value')).toEqual(targetData.amount);
            }, timeout);


            it('The foo bar number  should be : "' + targetData.fooBar + '". ', function(){
                expect(element(by.css(selector)).getAttribute('value')).toEqual(targetData.fooBarNumber);

            }, timeout);

            return browser.waitForAngular();
        });
});
这样使用:

describe('first describe', function(){
            it('compare docs', function(){
               compareDocs(currentData,targetData);
            }, timeout);
});
describe('second describe where the doc is deleted', function(){
        it('should remove payment from list', function(){
              deleteDoc();//this runs too early, and delete the doc before compareDocs() has finished
              expect(element(by.css(selector)).isPresent).toBe(false);              
            }, timeout);
        });

TL;DR:如何防止
deleteDoc()
compareDoc()
完成之前运行?

Jasmine总是检查
descripe
和嵌套
descripe
函数的块。但是,当您在仅在被调用时执行的函数中定义套件(
descripe
)或规范(
it
)时,量角器无法识别指定函数中的套件或规范。您可以使用循环或自执行函数来执行套件和规范(我想这不会解决您的问题)。唯一可能的解决方案是调用一个代码块中没有任何套件或规范的函数。这里有一个例子-

function compareDocs(targetData, timeout){
    console.log('The amount field should be : "' + targetData.amount + '". ');
    expect(element(by.css(selector)).getAttribute('value')).toEqual(targetData.amount);
    console.log('The foo bar number  should be : "' + targetData.fooBar + '". ');       
    expect(element(by.css(selector)).getAttribute('value')).toEqual(targetData.fooBarNumber);
    return browser.waitForAngular();
};
注意:嵌套在
规范中的
描述
套件将不会执行


希望有帮助。

分享代码片段!在另一个
It
块中嵌套
It
description
是不受支持的行为
it
s应该有测试代码和期望<代码>描述
-另一个
描述
和/或
它的容器
。如果我是唯一的选择,我会这样做,谢谢你的帮助。你觉得我的问题不常见/奇怪吗?我认为我在这里有一个相当普遍的需求。在测试中重复测试步骤似乎是一个普遍的需求。如前所述,当您编写循环或自执行函数来代替所使用的函数时,始终可以重复这些步骤。量角器考虑了它可以执行的所有
descripe
s和
it
s,而无需附加任何字符串(在您的情况下是一个仅在被调用时执行的函数),并将jasmine2的原则应用于它们。所以是的,如果它被递归使用,你可以为它提出一个特性请求。