2014-09-20 12 views
5

Làm thế nào tôi có thể thêm một móc trước khi cam kết sẽ chạy thử nghiệm rspec của tôi và nếu có bất kỳ, sẽ không hoàn thành cam kết. Tôi có thể lấy các bài kiểm tra để chạy nhưng không ngăn cản các cam kết trên bất kỳ thất bại của họLàm thế nào có thể một git hook trước cam kết chạy kiểm tra rspec và ngăn chặn một cam kết?

tôi đã sao chép .git/hooks/pre-commit.sample-.git/hooks/pre-commit

Tôi đã thêm rspec spec gần phía dưới.

Các thử nghiệm chạy như một phần của cam kết ... nhưng sự thất bại không làm ngừng cam kết hoàn thành.

$ git commit -m'test' 
....................................................................................................F............. 

Failures: 

    1) Link Good url SHOULD be valid 
    Failure/Error: expect(link.valid_get?).to be false #true 

     expected false 
      got true 
    # ./spec/models/link_spec.rb:26:in `block (2 levels) in <top (required)>' 

Finished in 32.78 seconds (files took 3.58 seconds to load) 
114 examples, 1 failure 

Failed examples: 

rspec ./spec/models/link_spec.rb:24 # Link Good url SHOULD be valid 
[79230846_hook_to_run_tests 6c09570] test 
1 file changed, 1 insertion(+) 
create mode 100644 x.x 

Có lẽ tôi cần một cách khác để chạy các kiểm tra rspec sẽ làm tăng sai số khác không cần thiết?

Hiện nay nó được đặt ở phía dưới:

... 
    echo 
    echo " git config hooks.allownonascii true" 
    echo 
    exit 1 
fi 

rspec spec 

exec git diff-index --check --cached $against -- 

tôi đang làm tất cả điều này trong một chi nhánh (không làm chủ). Không biết liệu điều đó có liên quan hay không.

Trả lời

6

tôi thấy rằng việc sử dụng

exec rspec spec 

trong

.git/hooks/pre-commit 

đã cho tôi chức năng mong muốn -
cam kết nỗ lực kích hoạt chạy thử nghiệm rspec và cam kết chỉ hoàn thành nếu tất cả các bài kiểm tra rspec vượt qua.

1

Nếu bản thân móc trước đó thực hiện một lối ra bằng không, hoặc là nó chỉ gọi rspec?

Có thể tất cả những gì bạn cần làm là thêm exit $? sau cuộc gọi rspec.

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