Law*_*eld 13 javascript testing end-to-end angularjs protractor
编写应该应用于站点中每个页面的断言的最佳方法是什么?
我正在测试我的网站页脚中是否存在元素,因此该元素应该存在于所有页面上.
我正在考虑编写一个单独的文件来测试网站的模板元素,然后将其包含在所有规范中.虽然看起来好像没有其他人这样做?
首先,为了编写更清晰的测试并更好地了解目标站点的组成部分,请应用页面对象模式并将网页的各个部分拆分为不同的页面对象。例如,footer、header可以而且应该是单独的页面对象,可以在站点的不同网页中重复使用。
有关该主题的更多信息:
据我理解这个问题,为了遵循“DRY”原则,您需要某种“共享”茉莉花规范,您可以定义一次并在多个测试套件中运行。
这正是DRYing up Jasmine Specs with Shared Behaviour一文所描述的内容。这个想法相当简单 - 在您的测试套件中定义一个函数并从其他测试套件中调用它。例子:
创建一个接受上下文(页面对象)的函数,并包含页脚特定的可重用测试:
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');
});
});
});
}
Run Code Online (Sandbox Code Playgroud)从传递上下文 - 页脚页面对象的其他测试套件中调用该函数:
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());
});
Run Code Online (Sandbox Code Playgroud)您可能需要调整和改进代码才能使其正常工作,但想法保持不变:定义一次并重用。传递页面对象只会使其更加干净和透明。
另请参阅: