필자는 스펙에서 몇 가지 예에 대해서만 필요한 비싼 테스트 설정을 가지고 있으며, 필요한 경우 한 번만 실행하면됩니다. 느리기 때문에 이전 (: 각) 블록에 넣지 않으려 고하지만 이전 (: all)이 내 필요에 맞지 않는 것 같습니다. 난 비싼 부분은 다른 일반적인 설치 후 실행해야한다는 복잡한 요소가 있다고 생각합니다. (이것은 검색 엔진 응용 프로그램에 대한 카피 바라 테스트입니다 일부 레코드를 생성 한 후, 나는 검색 결과를 얻기 위해 인덱스에 테스트 데이터베이스가 필요합니다..) 내 설정은 다음과 같이이다 : 문제는rspec의 특정 컨텍스트에 대한 일회성 구성은 무엇입니까?
feature 'some particular feature' do
before(:each) do
# a bunch of common test setup (creating records that this test will use)
end
describe 'simple example #1' do
# a simple example that doesn't need the expensive setup
end
.
.
.
describe 'simple example #N' do
# a simple example that doesn't need the expensive setup
end
describe 'a more complicated example' do
before(:all) do
# expensive_setup that depends on the records created above
end
it 'does something' do ... end
it 'does something else' do ... end
.
.
.
it 'even does this' do ... end
end
end
rspec이 more complicated example
컨텍스트에서 예제를 실행 중일 때 before(:all)
블록은 보다 먼저 실행되고은 before(:each)
블록을 사용합니다. 지금까지 before(:all)
블록 대신 비싼 설정을 before(:each)
블록에 넣어야했습니다. 즉, 값 비싼 설정은 해당 예제의 각 it
블록에 대해 실행되어야합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?
업데이트 : 비싼 작업의 결과가 데이터베이스에 만을 따라 언급하는 데 실패 . 따라서 각 예제는 동일한 데이터베이스 설정을 사용하기 때문에 각 예제에 대해 값 비싼 작업 결과를 다시 사용하는 것이 안전합니다. 또한, 결과는 파일 시스템에 있으므로, 예제들 사이에 결과는 지워지지 않을 것입니다.
나는가는 길은 결과가 좋고 다시 계산할 필요가 없다는 것을 나타내는 일종의 마커를 파일 시스템에 넣는 것이라고 생각합니다.
문제는 (대부분의 설정에서) 데이터베이스 레코드가 테스트 사이에 제거된다는 것입니다. 따라서 값 비싼 작업이 db 레코드에 종속되거나 생성되면 db 레코드가 파괴됩니다. –
예. 이 경우 비싼 작업의 결과는 파일 시스템의 디렉토리에 있습니다. 또한 비싼 작업의 결과가 데이터베이스의 레코드에만 의존한다는 것을 분명히 밝힐 필요가 있습니다. 따라서 검색을 위해 데이터베이스를 인덱싱합니다. 따라서 각 예제에서 데이터베이스 설정이 동일하므로 이전 예제의 결과를 다시 사용하는 것이 안전합니다. – speedarius