7

Tôi gặp sự cố khi gọi tùy chọn dòng lệnh trên hoa nhài-hoa cho phép thực hiện chỉ những thử nghiệm phù hợp với mẫu nhất định. spec của tôi đọc như sau:Thực hiện kiểm tra chọn lọc trong Karma Jasmine bằng cách sử dụng mẫu phù hợp

/path/to/single-test/main.spec.js

describe('my first test suite', function() { 
    it('always passes', function() { 
    expect(true).toBe(true); 
    }); 

    it('still always passes', function() { 
    expect(true).toBe(true); 
    }); 
}); 

tôi giả mô tả (ví dụ như "vẫn luôn đi") là mục mà mẫu được chỉ định bởi tùy chọn dòng lệnh grep được khớp. Khi tôi cố gắng để chạy ví dụ thứ hai dựa trên thực tế là mô tả của nó là ví dụ duy nhất có chứa từ "vẫn", cả hai ví dụ được thực hiện thay vì chỉ là một:

$ karma start -- --grep=still 
INFO [karma]: Karma v0.12.35 server started at http://localhost:9876/ 
INFO [launcher]: Starting browser PhantomJS 
INFO [PhantomJS 1.9.8 (Linux 0.0.0)]: Connected on socket 7Dn7Ez1Reap7ch0Uzsb0 with id 44623726 
PhantomJS 1.9.8 (Linux 0.0.0): Executed 2 of 2 SUCCESS (0.002 secs/0.001 secs) 

Làm thế nào để thực hiện chỉ là một này ví dụ dựa trên mẫu? official documentation không đưa ra mẫu sử dụng tùy chọn đối sánh mẫu.

Tôi đọc trong discussion of a pull request, tùy chọn grep có thể được sử dụng kết hợp với "phù hợp" và "fdescribe". Điều này hoạt động khi được kiểm tra. Tuy nhiên, trong trường hợp sử dụng grep với "fit", mục đích của đối số mẫu cho tùy chọn grep là gì? (Nó sẽ được tốt đẹp để có thể thực hiện các bài kiểm tra có chọn lọc mà không cần phải tăng thêm mã nguồn!)

Dưới đây là phần còn lại của các tập tin trong dự án của tôi để tham khảo:

/path/to/single-test/karma.conf.js

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['jasmine'], 
    files: ['*.spec.js'], 
    exclude: [], 
    preprocessors: {}, 
    reporters: ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: false, 
    browsers: ['PhantomJS'], 
    singleRun: true 
    }); 
}; 

/path/to/single-test/package.json

{ 
    "name": "single-test", 
    "version": "1.0.0", 
    "description": "", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "MIT", 
    "devDependencies": { 
    "jasmine-core": "^2.3.4", 
    "karma": "^0.12.35", 
    "karma-jasmine": "^0.3.5", 
    "karma-phantomjs-launcher": "^0.2.0", 
    "phantomjs": "^1.9.17" 
    } 
} 
+0

liên quan: [sử dụng 'fdescribe',' fit'] (http://stackoverflow.com/a/23793631 /) thay vì 'mô tả',' it' –

Trả lời

5

Bạn phải khởi động một máy chủ Karma, sau đó chỉ định tùy chọn --grep trong một Á hậu Karma. I E. cái gì đó dọc theo dòng:

karma start path/to/karma.conf.js 

Sau đó, trong thiết bị đầu cuối khác:

karma run path/to/karma.conf.js -- --grep=still 

Điều quan trọng là bạn thiết lập singleRun: false trong các tùy chọn cấu hình.

+0

Lưu ý bổ sung: khi bạn chạy các lệnh ở trên, lệnh thiết bị đầu cuối thứ hai sẽ chỉ chạy một lần và thoát, và cửa sổ đầu cuối đầu tiên sẽ tiếp tục xem các thay đổi và chỉ chạy tập con được lọc của kiểm tra. –

+1

Nếu bạn muốn grep nhiều thẻ không theo thứ tự cụ thể, bạn có thể sử dụng phương thức từ [câu trả lời này] (https://stackoverflow.com/questions/469913/regular-expressions-is-there-an-and-operator# answer-470602), vd đối với các thẻ '# tag1' và' # tag2': '--grep = '(? =. * # tag1) (? =. * # tag2)''. – Will

0

Có plugin karma-jasmine-spec-tags giúp lọc các kiểm tra đang chạy theo thẻ trong tên của chúng.

Ví dụ sử dụng:

$ karma start --tags smoke 
$ karma start --skip-tags slow,bench 
$ karma start --tags bench --skip-tags slow 
$ karma start --tag-prefix 'scope:' --tags critical 

đâu một spec là sau đây:

describe('Example test',() => { 
    it('should be a #smoke test',() => { 
     // ... 
    }); 

    it('#slow test',() => { 
     // ... 
    }); 
}) 

describe('Performance test suite #bench',() => { 
    it('#fast #smoke test',() => { 
     // ... 
    }); 

    it('#slow test',() => { 
     // ... 
    }); 
}) 

describe('Custom tag prefix',() => { 
    it('test scope:critical',() => { 
     // ... 
    }); 
}) 
Các vấn đề liên quan