나는 거의 동일한 테스트를 많이하고 있습니다. DRY와 scanability의 관점에서 테스트를 하나의 함수로 추상화 한 다음 몇 가지 매개 변수로 함수를 호출하고 싶습니다. 그런 다음이 함수는 it
을 호출하고 해당 사양을 제품군에 추가합니다.함수 안에 재스민 스펙을 정의 할 수 있나요? 그리고 beforeEach를 적용 할 수 있습니까?
사양이 다른 사양과 동일한 방식으로 실행되지 않고 beforeEach
이 공용 기능에서 정의 된 사양보다 먼저 호출되지 않는다는 점을 제외하면 작동하는 것처럼 보입니다. 이 일을하고 beforeEach
및 afterEach
의 기능을 유지하는 방법이
define(['modules/MyModule','jasmine/jasmine'], function(MyModule) {
describe('myModule', function() {
function commonTests(params) {
it('should pass this test OK', function() {
expect(true).toBe(true);
});
it('should fail because module is undefined', function() {
expect(module[params.method]()).toBe('whatever');
});
}
var module;
beforeEach(function() {
module = new MyModule();
});
describe('#function1', function() {
commonTests({
method: 'function1'
});
});
describe('#function2', function() {
commonTests({
method: 'function2'
});
});
});
});
있습니까?
UPDATE : 내 예를 잘못 가지고 같은
이 보이는, 죄송합니다.
define(['modules/MyModule'], function(MyModule) {
function commonTests(params) {
it('will fail because params.module is undefined', function() {
expect(typeof params.module).toBe('object');
expect(typeof params.module[params.method]).toBe('function');
});
it('has a few tests in here', function() {
expect(true).toBe(true);
});
}
describe('MyModule', function() {
var module;
beforeEach(function() {
module = new MyModule();
});
describe('#function1', function() {
commonTests({
module: module,
method: 'function1'
});
});
describe('#function2', function() {
commonTests({
module: module,
method: 'function2'
});
});
});
});
내가 module
의 값이 항상 첫 번째 예에서와 같이 module
의 현재 값을 사용하는 대신 commonTests
에 호출의 일부로서 보존되어 있기 때문에 실패 생각 : 여기에 실패하는 경우입니다. 나는 거기에 도착하면 내 솔루션을 게시 할 것입니다 ...
흥미 롭습니다. 당연히 맞습니다 : require.js입니다. 것은 'commonTests'에없는 다른 테스트가 있기 때문에 MyModule이로드되고 있다는 것을 알 수 있습니다 (간결성을 위해 생략했습니다). 그리고 그들은 잘 통과합니다. 'commonTests'에서 디버거를 실행하고'module'의 값을 검사 할 때'undefined'입니다. 'commonTests' 밖의 테스트에서 올바른 값을 가지고 있습니다 ... 감사합니다! –
다른 테스트가 하단의 두 개의 'describe'호출에 있다고 가정합니다. 내가 JS에서'var' 스코프에 대해 읽은 것을 기억합니다. 경우에 따라 함수에서'var'로 정의 된 변수는'var' 문 뒤에 만 사용할 수 있습니다. 이 경우 여기에 'commonTests'에있는 전역 모듈 (존재하지 않음)에 액세스하려고합니다. 아마도'var 모듈 '과'beforeEach'를 주변의'describe'의 맨 위로 옮기려고 할 수 있습니다. – Andreas
감사합니다 Andreas, 나는 모양을 가지고 내 코드와 예제를 비교했지만 약간 다릅니다. 나는 질문에 업데이 트를 게시했습니다 ... –