2015-05-08 16 views
8

Tôi thiết lập grunt để chạy kiểm tra jasmine node.js. Đối với một số lý do, với cấu hình này, kết quả luôn hiển thị gấp đôi các thử nghiệm.kiểm tra grasmine-nút grunt đang chạy hai lần

Đây là cấu hình của tôi:

Tôi đang sử dụng jasmine-node.

/spec/some-spec.js:

var myModule = require('../src/myModule.js'); 
describe('test', function(){ 
    it('works', function(done){ 
     setTimeout(function(){ 
      expect(1).toBe(1); 
      done(); 
     }, 100); 
    }); 
}); 

Gruntfile.js:

module.exports = function(grunt) { 
    grunt.initConfig({ 
     jasmine_node: { 
      options: { 
       forceExit: true 
      }, 
      all: ['spec/'] 
     } 
    }); 
    grunt.loadNpmTasks('grunt-jasmine-node'); 
    grunt.registerTask('default', ['jasmine_node']); 
}; 

Điều này dẫn đến hai kiểm tra chạy thay vì một.

> grunt 
Running "jasmine_node:all" (jasmine_node) task 
.. 

Finished in 0.216 seconds 
2 tests, 2 assertions, 0 failures, 0 skipped 

Trả lời

2

Dự án jasmine-node là khá cũ. Số commit mới nhất là từ tháng 7 năm 2014. Plugin grunt-jasmine-node dường như hoạt động, nhưng chạy với nội dung nào đó cũ sẽ có vẻ là một IMHO vô nghĩa nhỏ.

Để kiểm tra các mô-đun CommonJS sử dụng Jasmine, tôi khuyên bạn nên sử dụng Karma cùng với các yêu cầu karma-jasminekarma-commonjs. Tôi có ví dụ của bạn làm việc với các tập tin sau đây:

package.json

{ 
    "private": "true", 
    "devDependencies": { 
    "grunt": "^0.4.5", 
    "grunt-jasmine-node": "^0.3.1", 
    "grunt-karma": "^0.10.1", 
    "jasmine-core": "^2.3.4", 
    "karma": "^0.12.31", 
    "karma-commonjs": "0.0.13", 
    "karma-jasmine": "^0.3.5", 
    "karma-phantomjs-launcher": "^0.1.4" 
    } 
} 

karma.conf.js

module.exports = function(config) { 
    config.set({ 
    basePath: '.', 
    frameworks: ['jasmine', 'commonjs'], 
    files: [{ 
     pattern: 'src/**/*.js' 
     }, { 
     pattern: 'spec/**/*.js' 
     }], 

    preprocessors: { 
    'src/**/*.js': ['commonjs'], 
    'spec/**/*.js': ['commonjs'] 
    }, 

    reporters: ['progress'], 

    browsers: ['PhantomJS'] 
    }); 
}; 

Gruntfile.js (không bắt buộc nếu bạn vẫn muốn sử dụng grunt)

module.exports = function(grunt) { 
    grunt.initConfig({ 
    karma: { 
     unit: { 
     configFile: 'karma.conf.js', 
     options: { 
      singleRun: true 
     } 
     } 
    } 
    }); 
    grunt.loadNpmTasks('grunt-karma'); 
    grunt.registerTask('default', ['karma:unit']); 
}; 

Bạn cũng nên cài đặt nhân viên dòng lệnh nghiệp trên toàn cầu, giống như bạn có thể đã làm với grunt. npm install -g karma-cli

Từ dòng lệnh của bạn, bạn có thể bắt đầu nghiệp bằng cách nhập karma start. Nó sẽ chạy các bài kiểm tra và sau đó xem các tệp của bạn và chạy lại chúng sau mỗi lần lưu. (VERY NICE)

Hoặc bạn có thể chạy karma start --single-run để chỉ chạy thử nghiệm một lần và thoát. Nếu bạn cũng cập nhật Gruntfile của bạn, bạn cũng có thể chỉ cần chạy grunt để chạy thử nghiệm một lần.

5

Tôi đã có thể tạo lại hành vi. Đây là những gì dường như xảy ra:

  1. Nhiệm vụ trông trong thư mục nào đó (spec trong trường hợp của bạn) cho các tập tin với đặc tả trong tên.
  2. Sau đó, nó trông lại trong mỗi thư mục trong toàn bộ dự án cho các tệp có spec trong tên.

Điều gì kết thúc với nó là 2 tập hợp tệp thử nghiệm trùng lặp để chạy.

Nỗ lực đầu tiên của tôi khi cố gắng ép nó vào hành vi hợp lý hơn là đặt specNameMatcher: null (mặc định là 'spec') và để thư mục được đặt thành 'spec /'. Điều này dẫn đến không có thử nghiệm nào được chạy, vì rõ ràng cả hai điều kiện (tên và thư mục) phải được đáp ứng cho các tệp trong thư mục được chỉ định. Bạn nhận được cùng một vấn đề nếu specNameMatcher được để ở giá trị mặc định, nhưng các tệp trong thư mục không có 'spec' trong tên.

không công việc là để thiết lập thư mục (hoặc 'kiểm tra thiết lập' hoặc bất cứ điều gì bạn muốn gọi nó) để []:

jasmine_node: { 
     options: { 
      forceExit: true 
     }, 
     all: [] 
    } 

Việc nắm bắt được rằng nếu bạn có bất kỳ file khác ở một nơi khác trong dự án với 'spec' trong tên, họ sẽ bị nhầm lẫn với các thử nghiệm của hoa nhài.

Tôi sẽ coi hành vi này là lỗi và có thể được báo cáo qua trang vấn đề github của dự án.

0

Tôi gặp vấn đề tương tự khi sử dụng nút grunt-jasmine-node, và như aeryaguzov chỉ ra, dự án đó không còn được duy trì nữa. Chuyển sang grunt-jasmine-node-new giải quyết vấn đề cho tôi.

grunt-hoa nhài-node-mới là một ngã ba của grunt-hoa nhài-nút đó đang tích cực duy trì, và có thể được tìm thấy ở đây: https://www.npmjs.com/package/grunt-jasmine-node-new

2

hiện nay lên bình chọn câu trả lời không phải là giải pháp. Bạn chỉ cần sửa đổi biểu thức sẽ khớp với các bài kiểm tra của bạn. Câu trả lời là như sau:

module.exports = function(grunt) { 
grunt.initConfig({ 
    jasmine_node: { 
     options: { 
      forceExit: true 
     }, 
     all: ['spec/*spec.js'] 
    } 
}); 
grunt.loadNpmTasks('grunt-jasmine-node'); 
grunt.registerTask('default', ['jasmine_node']); 
}; 

Ở đây bạn có thể thấy rằng 'tất cả' được thiết lập để * 'đặc tả/spec.js'. Điều này sẽ tìm kiếm tất cả các bài kiểm tra.

Thứ hai, chỉ vì dự án chưa có cam kết gần đây, không có nghĩa là "cũ". nút hoa nhài chỉ đơn giản là ổn định.

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