Làm thế nào để bạn chạy một tệp thử nghiệm / spec trong RSpec?


282

Tôi muốn có thể chạy thử nghiệm một tệp spec duy nhất - ví dụ: đối với một tệp tôi đang chỉnh sửa. rake specthực hiện tất cả các thông số kỹ thuật. Dự án của tôi không phải là dự án Rails, vì vậy rake spec:dockhông hoạt động.

Không biết điều này có quan trọng không, nhưng đây là cấu trúc thư mục của tôi.

./Rakefile
./lib
./lib/c Muff.rb
./lib/c Muff
./lib/c Muff / doc.rb
./lib/c Muff / db.rb
./spec
./spec/spec.opts
./spec/spec_rcper.rb
./spec/db_spec.rb

Câu trả lời:


392

Hoặc bạn có thể bỏ qua rake và sử dụng lệnh 'rspec':

rspec path/to/spec/file.rb

Trong trường hợp của bạn, tôi nghĩ miễn là tệp ./spec/db_spec.rb của bạn bao gồm các trình trợ giúp phù hợp, nó sẽ hoạt động tốt.

Nếu bạn đang sử dụng phiên bản cũ hơn của rspec thì đó là:

spec path/to/spec/file.rb

31
với rspec mới, bạn phải sử dụng "rspec path / to / file.rb"
djburdick

3
Có thể tôi đang làm sai, nhưng tôi phải thực hiện "bundle exec rspec path / to / spec / file.rb"
andrhamm

2
Nếu bạn đang sử dụng Rails, có lẽ bạn sẽ muốn thực hiện thông số kỹ thuật của mình bằng Rake để đảm bảo bạn đang bắt đầu từ một cơ sở dữ liệu trống.
siêu sáng

@andrhamm, bạn chỉ đang chạy thông số kỹ thuật trong bối cảnh gói của bạn. Điều này là cần thiết nếu bạn không sử dụng đá quý (mặc định có rvm và là một phần mở rộng riêng cho rbenv)
Caleb

6
Nếu bạn chỉ muốn chạy một thử nghiệm, bạn sẽ thêm số dòng bắt đầu thử nghiệm vào tệp. Ví dụ: đường dẫn rspec / đến / spec / file.rb: 455
runamok 14/03/2015

201

Lời mời thô:

rake spec SPEC = spec / bộ điều khiển / session_controll_spec.rb \
          SPEC_OPTS = "- e \" nên đăng nhập bằng cookie \ ""

Bây giờ hãy tìm hiểu làm thế nào để nhúng cái này vào trình soạn thảo của bạn.


1
Như tôi đã nói, tôi không ở trong đường ray nên không có bộ điều khiển. Nhưng vâng, "rake spec SPEC = file.rb" hoạt động. Cảm ơn! Tôi đang làm việc về tích hợp Emacs.
Jonathan Trần

5
Đừng khởi chạy rakefile nếu bạn có thể tránh nó. Phải mất tuổi frickin
Orion Edwards

2
Tôi đã thay đổi câu trả lời được chấp nhận, nhưng thông số Spec_OPTS cũng hữu ích với tôi.
Jonathan Trần

2
Bây giờ đó là những gì tôi gọi là một câu trả lời tốt. Tại sao nó không được đánh dấu là "Trả lời"?
gmile

1
Chạy spec trực tiếp thường là lựa chọn tốt nhất, nhưng có nhiều lúc bạn phải chạy cào cho nhiều bit ma thuật khác nhau trong Rakefile tùy chỉnh
Nerdmaster

124

Câu hỏi này là một câu hỏi cũ, nhưng nó xuất hiện ở đầu Google khi tìm kiếm cách chạy thử nghiệm duy nhất. Tôi không biết nếu đó là một bổ sung gần đây, nhưng để chạy thử nghiệm duy nhất trong một thông số kỹ thuật bạn có thể làm như sau:

rspec path/to/spec:<line number>

trong đó -line number- là số dòng chứa một phần bài kiểm tra của bạn. Ví dụ: nếu bạn có một thông số như:

1: 
2: it "should be awesome" do
3:   foo = 3
4:   foo.should eq(3)
5: end
6:

Giả sử nó được lưu trong spec / model / foo_spec.rb. Sau đó, bạn sẽ chạy:

rspec spec/models/foo_spec.rb:2

và nó sẽ chỉ chạy một thông số đó. Trên thực tế, con số đó có thể là bất cứ thứ gì từ 2 đến 5.

Hi vọng điêu nay co ich!


Điều này thật thú vị, mặc dù có vẻ như nó không hoạt động một khi bạn cấu trúc lại thông số của bạn thành nhiều tệp (nghĩa là bạn chỉ có thể sử dụng nó với tệp _spec.rb chính, nhưng nếu không có ví dụ nào của bạn trong đó, thì nó sẽ không chạy được gì Ngoài ra, nếu bạn cố gắng sử dụng nó cho một tệp không phải là tệp đặc tả cấp cao nhất, thì nó cũng sẽ không chạy được gì.)
Trejkaz

Tôi không hoàn toàn làm theo. Bạn có ý nghĩa gì bởi "tập tin đặc tả cấp cao nhất?" Bộ kiểm tra của tôi khá nhiều luôn được chia thành nhiều tệp và tôi luôn có thể gọi các kiểm tra trong một tệp bằng phương pháp này. Bạn có nghĩa là có một tệp đó requirelà các tệp spec khác của bạn?
juanpaco

Tôi có thể sử dụng điều này trên bất kỳ tập tin nào ở mọi cấp độ trong thư mục spec /. Tôi tin Trejkaz là không chính xác.
Michael Durrant

7
Điều này thật tuyệt vời và nên được đặt lên hàng đầu!
Tommaso Barbugli

4
Tôi sử dụng điều này mọi lúc, nhưng đôi khi bạn muốn chạy một số thử nghiệm từ một tệp. Sau đó, bạn có thể nhập tất cả các ví dụ như thế này:rspec spec/models/foo_spec.rb:2:12:49
swilgosz

61

Bạn cũng có thể sử dụng văn bản thực tế của trường hợp thử nghiệm * e * xample với -e!

Vì vậy đối với:

it "shows the plane arrival time"

bạn có thể dùng

rspec path/to/spec/file.rb -e 'shows the plane arrival time'
./scripts/spec path/to/spec/file.rb -e 'shows the plane arrival time'

không cần cào ở đây.


Đây là tất cả những gì bạn cần, ngoại trừ "thông số kỹ thuật" nên được thay thế bằng "rspec" như đã nêu @bandhunt
Nicolas Wormser

19

từ trợ giúp (spec -h):

-l, --line LINE_NUMBER           Execute example group or example at given line.
                                 (does not work for dynamically generated examples)

Ví dụ: spec spec / runner_spec.rb -l 162


3
Trong các phiên bản Rspec mới hơn, bạn nối số dòng sau dấu hai chấm :trên tài liệu và câu trả lời phổ biến.
dragon788

13

Nếu bạn đã cài đặt rspec như một plugin chứ không phải là đá quý, thì bạn sẽ không thể specthực thi được.

Ở bất cứ giá nào, tất cả những gì bạn cần làm là chạy tệp bằng ruby. Mã rspec đủ thông minh để chạy thử nghiệm cho bạn.

ví dụ:

ruby myclass_spec.rb

2
Có thể chạy một thử nghiệm trong tệp như thế này không?
Ian Vaughan

12

http://github.com/grosser/single_test cho phép bạn làm những việc như ..

rake spec:user          #run spec/model/user_spec.rb (searches for user*_spec.rb)
rake test:users_c       #run test/functional/users_controller_test.rb
rake spec:user:token    #run the first spec in user_spec.rb that matches /token/
rake test:user:token    #run all tests in user_test.rb that match /token/
rake test:last
rake spec:last

Có vẻ như viên đá quý đã không được duy trì, lần cam kết cuối cùng là 5 năm trước!
thegreendroid

10

Ruby 1.9.2 và Rails 3 có một cách dễ dàng để chạy một tệp spec:

  ruby -I spec spec / model / user_spec.rb

Giải trình:

  • rubylệnh có xu hướng nhanh hơn rakelệnh
  • -I spec có nghĩa là "bao gồm thư mục 'spec' khi tìm tệp"
  • spec/models/user_spec.rb là tập tin chúng tôi muốn chạy.

Bạn có thể chạy một bài kiểm tra trong tập tin đó với một số tùy chọn bổ sung không?
Ian Vaughan

10

Để chạy tất cả các tệp rspec của bạn:rspec

lưu ý: bạn phải ở trong thư mục gốc của dự án

Để chạy một tệp rspec:rspec 'path_to/spec.rb'

lưu ý: thay thế 'path_to / spec.rb' bằng đường dẫn của bạn. Dấu ngoặc kép tùy chọn.

Để chạy một rspec thử nghiệm từ một tập tin:rspec 'path_to/spec.rb:7'

lưu ý :: 7 là số dòng bắt đầu kiểm tra


5

Tôi đã gặp khó khăn khi làm cho bất kỳ ví dụ nào trong số này hoạt động, có thể vì bài viết đã cũ và các lệnh đã thay đổi?

Sau vài lần chọc tôi thấy tác phẩm này:

rspec spec / model / user_spec.rb

Điều đó sẽ chỉ chạy các tệp duy nhất và cung cấp đầu ra hữu ích trong thiết bị đầu cuối.


Điều này đã được đề cập trong một bình luận trong câu trả lời được chấp nhận. Vâng, tôi nghĩ rằng bài viết này là quá cũ mà tên lệnh đã thay đổi.
Jonathan Trần

4

lốm đốm.vim


3

Ngoài ra, có một cái nhìn tại autotest.

Chạy autotest trong cửa sổ lệnh sẽ có nghĩa là tệp spec sẽ được thực thi bất cứ khi nào bạn lưu nó. Ngoài ra, nó sẽ được chạy bất cứ khi nào tệp bạn đang suy đoán được chạy.

Ví dụ: nếu bạn có một tệp đặc tả mô hình được gọi là person_spec.rb và một tệp mô hình mà nó đang chỉ định là person.rb, thì bất cứ khi nào bạn lưu một trong hai tệp này từ trình soạn thảo của mình, tệp spec sẽ được thực thi.


3

Mặc dù nhiều câu trả lời tuyệt vời đã được viết cho câu hỏi này, nhưng không ai trong số họ sử dụng phương pháp Rspectags .

Tôi sử dụng các thẻ để chạy một hoặc nhiều thông số kỹ thuật trong các tệp khác nhau - chỉ những thông số liên quan đến nhiệm vụ phát triển hiện tại của tôi.

Ví dụ: tôi thêm thẻ "dev" với giá trị "hiện tại":

it "creates an user", dev: :current do
  user = create(:user)
  expect(user.persisted?).to be_truthy
end

sau đó tôi chạy

bundle exec rspec . --tag dev:current

Các thẻ / giá trị khác nhau có thể được đặt trong các thông số hoặc nhóm riêng lẻ.


2

Hãy nói rằng, bạn đang chạy thử nghiệm để tạo việc cần làm. Bạn luôn có thể chạy mã đặc tả todo cụ thể đó bằng tệp crete_spec.rb như bên dưới.

      rspec/spec/features/controller/spec_file_name.rb

   Example:

   Creating  rspec spec/features/todos/create_spec.rb
   Editing   rspec spec/features/todos/edit_spec.rb
   Deleting  rspec spec/features/todos/destroy_spec.rb

Nếu bạn muốn chạy tất cả các thông số kỹ thuật trong một ngắn.

   rspec 

Nếu bạn muốn chạy tất cả các thông số kỹ thuật trong một người dùng bộ điều khiển cụ thể này.

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

Hy vọng nó giúp bạn hiểu hơn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.