2016-02-18 18 views
13

Làm thế nào việc sử dụng các chức năng không mong muốn trong cơ sở mã được phát hiện trong Node, đặc biệt là Gulp?Phát hiện các chức năng không mong muốn (fdescribe, describe.only) như nhiệm vụ Gulp

tôi sau khi kiểm tra thông số kỹ thuật cho vô hư hỏng, tức là ddescribe/fdescribeiit/fit cho Jasmine hoặc .only.skip cho Mocha:

// should be reported 
fdescribe(function() { 
    // should not be reported 
    it(function() { 
    var fit = ...; 
    this.fit = ...; 
    }); 

    // should not be reported 
    // fit(function() { ... }); 

    // should be reported 
    xit(function() { ... }); 

    // should be reported 
    fit(function() { ... }); 
}); 

// should be reported 
describe.only(function() { 
    // should not be reported 
    it(function() { ... }); 

    // should not be reported 
    // it.only(function() { ... }); 

    // should be reported 
    it.skip(function() { ... }); 

    // should be reported 
    it.only(function() { ... }); 
}); 

Nhiệm vụ nên thoát với lỗi và tên tệp đầu ra và số dòng nơi các hàm được liệt kê được sử dụng.

Các chú thích chắc chắn không phải được phát hiện, cũng như các hàm/thuộc tính có cùng tên (rất có thể là fit), do đó, kết hợp regexp đơn giản không phải là một tùy chọn ở đây (giống như là console.*). Một số giải pháp dựa trên AST chấp nhận tên hàm do người dùng định nghĩa sẽ được đánh giá cao.

Trả lời

7

Tôi sẽ giải quyết nó trên bước phân tích tĩnh qua tiện ích linting ESLint javascript. Để bắt/specs mocha tập trung độc quyền vô tình còn lại trong codebase, có một no-exclusive-tests rule thực hiện trong eslint-plugin-mocha plugin:

Mocha có một tính năng cho phép bạn chạy thử nghiệm độc quyền bởi phụ .only một bài kiểm tra-suite hoặc một trường hợp thử nghiệm. Tính năng này thực sự là hữu ích để gỡ lỗi bài kiểm tra không thành công, do đó bạn không phải thực thi tất cả các bài kiểm tra của mình là . Sau khi bạn đã sửa thử nghiệm của mình và trước khi cam kết các thay đổi bạn phải xóa .only để đảm bảo tất cả các thử nghiệm được thực hiện trên hệ thống xây dựng của bạn.

Quy tắc này nhắc bạn xóa .only khỏi các thử nghiệm của mình bằng cách tăng cảnh báo bất cứ khi nào bạn đang sử dụng tính năng độc quyền.

Nếu bạn muốn để buộc các eslint chạy để gulp - sử dụng plugin gulp-eslint.


Nó cũng có thể là một ý tưởng tốt để chạy gulpeslint nhiệm vụ trước khi cam kết trong một cái móc git. Chúng tôi đã sử dụng gói pre-git để cài đặt và theo dõi các móc git.

Bằng cách này, các bài kiểm tra tập trung hoặc độc quyền sẽ không tham gia vào bộ mã nguồn ngay từ đầu.

+0

Tôi không nghĩ về linters cho mục đích đó. Tôi muốn có giải pháp dựa trên AST cho các tên hàm do người dùng định nghĩa trong tay, nhưng chỉ dành cho các hình khối khung kiểm thử eslint-plugin-mocha có thể là những gì tôi cần. Đáng buồn thay, có vẻ như nó không hỗ trợ '.skip'. – estus

+0

@ bestus tốt, chúng tôi đã có cùng một vấn đề chính xác nhưng với hoa nhài. Chúng ta đã sửa nó bằng 'eslint' và' eslint-plugin-jasmine', chạy lệnh 'grunt eslint' như một git hook trước cam kết - bây giờ, sau vài tháng sử dụng thiết lập này, tôi có thể nói rằng nó thực sự giúp giữ các codebase sạch của thức ăn thừa ngẫu nhiên như thông số kỹ thuật tập trung. Vui mừng được giúp đỡ. – alecxe

+0

@estus Tôi nghĩ quy tắc 'eslint-plugin-mocha' này sẽ cảnh báo về việc bỏ qua: https: // github.com/lo1tuma/eslint-plugin-mocha/blob/master/docs/rules/no-global-tests.md. – alecxe

Các vấn đề liên quan