2016-11-18 12 views
14

Tôi có dự án Angular2 xây dựng với Angular-CLI (beta 20).Cách chỉ thực hiện một thông số thử nghiệm với angular-cli

Có cách nào để chạy thử nghiệm chỉ đối với một tệp thông số đã chọn không.

Tôi đã từng có dự án dựa trên bắt đầu nhanh Angular2 và tôi có thể thêm thông số kỹ thuật vào tệp hoa nhài theo cách thủ công. Nhưng tôi không biết làm thế nào để thiết lập như vậy bên ngoài của thử nghiệm nghiệp hoặc làm thế nào để hạn chế thử nghiệm nghiệp cho một số tập tin với angular-cli xây dựng.

Trả lời

50

Mỗi tập tin .spec.ts của bạn đều đã kiểm tra nó nhóm trong describe khối như thế này:

describe('SomeComponent',() => {...}

Bạn có thể dễ dàng chạy chỉ khối duy nhất này, bằng cách đặt trước tên describe chức năng với f:

fdescribe('SomeComponent',() => {...}

Nếu bạn có chức năng như vậy, không có khác describe khối sẽ chạy. Btw. bạn có thể làm điều tương tự với it =>fit và cũng có phiên bản "danh sách đen" - x. Vì vậy:

  • fdescribefit gây chỉ chức năng đánh dấu theo cách này để chạy
  • xdescribexit gây tất cả nhưng chức năng đánh dấu theo cách này để chạy
+0

https://jasmine.github.io/api/2.8/global.html#fdescribe – hkievet

1

tôi giải quyết vấn đề này cho bản thân mình sử dụng grunt. Tôi có tập lệnh grunt bên dưới. Những gì kịch bản làm là lấy tham số dòng lệnh của thử nghiệm cụ thể để chạy và tạo ra một bản sao của test.ts và đặt tên thử nghiệm cụ thể trong đó.

Để chạy này, đầu tiên cài đặt grunt-cli sử dụng:

npm install -g grunt-cli 

Đặt phụ thuộc grunt dưới đây trong package.json của bạn:

"grunt": "^1.0.1", 
"grunt-contrib-clean": "^1.0.0", 
"grunt-contrib-copy": "^1.0.0", 
"grunt-exec": "^2.0.0", 
"grunt-string-replace": "^1.3.1" 

Để chạy nó lưu dưới tập tin grunt như Gruntfile .js trong thư mục gốc của bạn. Sau đó, từ dòng lệnh chạy nó như:

grunt --target=app.component 

Điều này sẽ chạy app.component.spec.ts.

tập tin Grunt là như sau:

/* 
This gruntfile is used to run a specific test in watch mode. Example: To run app.component.spec.ts , the Command is: 
grunt --target=app.component 
Do not specific .spec.ts. If no target is specified it will run all tests. 
*/ 
module.exports = function(grunt) { 
var target = grunt.option('target') || ''; 
    // Project configuration. 
    grunt.initConfig({ 
    pkg: grunt.file.readJSON('package.json'), 
    clean: ['temp.conf.js','src/temp-test.ts'], 
    copy: { 
     main: { 
     files: [ 
      {expand: false, cwd: '.', src: ['karma.conf.js'], dest: 'temp.conf.js'}, 
      {expand: false, cwd: '.', src: ['src/test.ts'], dest: 'src/temp-test.ts'} 
      ], 
     } 
    }, 
    'string-replace': { 
      dist: { 
      files: { 
       'temp.conf.js': 'temp.conf.js', 
       'src/temp-test.ts': 'src/temp-test.ts' 
      }, 
      options: { 
       replacements: [{ 
       pattern: /test.ts/ig, 
       replacement: 'temp-test.ts' 
       }, 
       { 
       pattern: /const context =.*/ig, 
       replacement: 'const context = require.context(\'./\', true, /'+target+'\\\.spec\\\.ts$/);' 
       }] 
      } 
     } 
    }, 
    'exec': { 
     sleep: { 
      //The sleep command is needed here, else webpack compile fails since it seems like the files in the previous step were touched too recently 
      command: 'ping 127.0.0.1 -n 4 > nul', 
      stdout: true, 
      stderr: true 
     }, 
     ng_test: { 
      command: 'ng test --config=temp.conf.js', 
      stdout: true, 
      stderr: true 
     } 
    } 
    }); 

    // Load the plugin that provides the "uglify" task. 
    grunt.loadNpmTasks('grunt-contrib-clean'); 
    grunt.loadNpmTasks('grunt-contrib-copy'); 
    grunt.loadNpmTasks('grunt-string-replace'); 
    grunt.loadNpmTasks('grunt-exec'); 
    // Default task(s). 
    grunt.registerTask('default', ['clean','copy','string-replace','exec']); 

}; 
+0

Nhìn vào giải pháp chấp nhận, tôi không nghĩ theo cách này là đề nghị – Ryan

+0

@Brian - giải pháp của tôi tránh phải sửa đổi mã nguồn và do đó ngăn ngừa các lỗi tiềm ẩn trong việc kiểm tra trong tệp. Giải pháp của tôi cho phép chỉ định tên thử nghiệm trên dòng lệnh bằng cách tự động hóa các bước thủ công. – vanval

+0

Vâng, đó là một điểm tốt thực sự. Có một cơ hội tốt mà bạn có thể quên loại bỏ xdescribe hoặc fdescribe - và thử nghiệm của bạn sẽ được loại bỏ một cách dễ dàng! – Ryan

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