Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 量角器中的模板测试?_Javascript_Angularjs_Testing_Protractor_End To End - Fatal编程技术网

Javascript 量角器中的模板测试?

Javascript 量角器中的模板测试?,javascript,angularjs,testing,protractor,end-to-end,Javascript,Angularjs,Testing,Protractor,End To End,编写应用于站点中每个页面的断言的最佳方法是什么 我正在测试我的站点的页脚中是否存在元素,因此该元素应该存在于所有页面上 我正在考虑编写一个单独的文件来测试站点的模板元素,然后将其包含在所有规范中。但似乎没有其他人在这样做?我使用规范的方式是规范讲述了一些场景,而不是特定页面,所以它不是“一个规范,一个页面”。我认为,如果规格中的条件不能影响元素的存在,那么在许多规格上测试同一件事情是不好的做法。 总的来说,我认为甚至没有必要测试这样的东西。我宁可考虑是否有可能让你的元素不存在,或者,如果有一些条

编写应用于站点中每个页面的断言的最佳方法是什么

我正在测试我的站点的页脚中是否存在元素,因此该元素应该存在于所有页面上


我正在考虑编写一个单独的文件来测试站点的模板元素,然后将其包含在所有规范中。但似乎没有其他人在这样做?

我使用规范的方式是规范讲述了一些场景,而不是特定页面,所以它不是“一个规范,一个页面”。我认为,如果规格中的条件不能影响元素的存在,那么在许多规格上测试同一件事情是不好的做法。

总的来说,我认为甚至没有必要测试这样的东西。我宁可考虑是否有可能让你的元素不存在,或者,如果有一些条件影响,并测试这些情况。
如果您坚持要测试这个(例如,有一些静态页面不共享内容,您的元素是手动添加的,您必须确保),我将创建一个规范来测试这个元素的存在,并在其中定义一个要测试的页面列表。因此,该测试将包括测试该元素在所有列出的页面上的存在性。

首先,为了编写更清晰的测试并更好地了解目标站点的组成,应用并将web页面的各个部分拆分为不同的页面对象。例如,
页脚
页眉
可以而且应该是单独的页面对象,可以跨站点的不同网页重用

有关此主题的更多信息:


据我所知,要遵循“干燥”原则,您需要某种“共享”jasmine规范,您可以定义一次并在多个测试套件中运行

这正是本文所描述的。这个想法相当简单——定义一个包含测试套件的函数,然后从其他测试套件调用它。例如:

  • 创建一个函数,该函数接受上下文-页面对象-并包含特定于页脚的可重用测试:

    function testFooter(footer) {
    
        describe("(shared)", function () {
    
            describe("should show footer with necessary information", function () {
                it("should show copyright", function () {
                    expect(footer.copyright.getText()).toEqual('Copyright 2014');
                });
            });
    
        });
    }
    
  • 从传递上下文-页脚页面对象的其他测试套件调用函数:

    var FooterPage = require('./footer.po.js');
    
    describe('Contacts page', function () {
        var scope = {};
    
        beforeEach(function () {
            browser.get('/contacts/');
            browser.waitForAngular();
            scope.page = new ContactsPage();
        });
    
        // other contacts page specific suites 
        // ...
    
        testFooter(new FooterPage());
    
    });
    
您可能需要调整和改进代码以使其正常工作,但想法保持不变:定义一次并重用。传递页面对象只会使页面更加干净和透明

另见:


Good solution@alecxe,我在这里也探讨了这个想法: