사이트의 모든 페이지에 적용해야하는 어설 션을 작성하는 가장 좋은 방법은 무엇입니까?각도기에서 템플릿을 테스트 하시겠습니까?
요소가 내 사이트의 바닥 글에 있는지 확인하기 위해 모든 페이지에 요소가 있어야합니다.
사이트의 템플릿 요소를 테스트하기 위해 별도의 파일을 작성한 다음 모든 사양에이 파일을 포함시킬 생각입니다. 다른 누군가가 이렇게하고있는 것 같지 않니?
사이트의 모든 페이지에 적용해야하는 어설 션을 작성하는 가장 좋은 방법은 무엇입니까?각도기에서 템플릿을 테스트 하시겠습니까?
요소가 내 사이트의 바닥 글에 있는지 확인하기 위해 모든 페이지에 요소가 있어야합니다.
사이트의 템플릿 요소를 테스트하기 위해 별도의 파일을 작성한 다음 모든 사양에이 파일을 포함시킬 생각입니다. 다른 누군가가 이렇게하고있는 것 같지 않니?
먼저 클리너 테스트를 작성하고 대상 사이트로 구성되는 내용을 더 잘 이해하려면 Page Object pattern을 적용하고 웹 페이지의 일부를 다른 페이지 개체로 분할하십시오. 예를 들어, footer
, header
은 사이트의 다른 웹 페이지에서 다시 사용할 수있는 별도의 페이지 개체 여야합니다.
은 "D 다음과 같이하십시오 주제에
더 RY "원칙을 사용하면 을 한 번 정의하고 여러 테스트 스위트에서 실행할 수있는"공유 된 "재스민 사양을 갖기를 원합니다..
정확하게 이것은 DRYing up Jasmine Specs with Shared Behavior 기사에서 설명하는 내용입니다. 아이디어는 오히려 간단합니다 - 내부에 테스트 스위트가있는 함수를 정의하고 다른 테스트 스위트에서 호출하십시오.예 :
컨텍스트 받아들이는 함수 생성 - 페이지 개체를 - 그리고 바닥 글 특정 재사용 가능한 테스트가 포함되어
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());
});
당신은 조정을 만들기 위해 코드를 개선해야 할 수도 있습니다 그러나 아이디어는 동일하게 유지됩니다. 한 번 정의하고 다시 사용하십시오. 페이지 객체를 전달하면 훨씬 깨끗하고 투명 해집니다.
항목 :
사양이 특정 시나리오에 대한 설명이 아닌 특정 페이지에 대한 설명과 같은 방식으로 사양을 사용하므로 "하나의 사양, 한 페이지"가 아닙니다. 스펙의 조건이 엘리먼트의 존재에 영향을 줄 수 없다면 많은 스펙에서 동일한 것을 테스트하는 것이 나쁜 습관이라고 생각합니다.
일반적으로 나는 그런 것들을 테스트 할 필요가 없다고 생각합니다. 나는 엘리먼트가 존재하지 않거나, 영향을 줄 수있는 조건이 있고, 그러한 상황을 테스트 할 수 있다면 가능한지 고려할 것입니다.
테스트를 고집한다면 (예 : 내용을 공유하지 않는 정적 페이지가 있고 손으로 요소가 추가되어 확실해야 함)이 요소의 존재 여부를 테스트하기위한 단일 사양을 만들고 거기에 테스트 할 페이지 목록을 정의하십시오. 따라서이 테스트는 나열된 모든 페이지에서 해당 요소의 존재를 테스트하는 것을 포함합니다.
좋은 솔루션 @alecxe, 나 또한 여기에이 아이디어를 탐구했습니다 http://stackoverflow.com/a/24046016/511069 –