Làm cách nào để chạy bảng điều khiển Rails trong môi trường thử nghiệm và tải test_helper.rb?


121

Bối cảnh: Tôi đang gặp một số vấn đề với đá quý "Factory Girl" của Thoughtbot, được sử dụng để tạo các đối tượng sử dụng trong các bài kiểm tra đơn vị và khác. Tôi muốn truy cập bảng điều khiển và chạy các cuộc gọi Factory Girl khác nhau để kiểm tra những gì đang xảy ra. Ví dụ, tôi muốn vào đó làm ...

>> Factory(:user).inspect

Tôi biết rằng bạn có thể chạy bảng điều khiển trong các môi trường khác nhau ...

$ script / console RAILS_ENV = test

Nhưng khi tôi làm điều đó, lớp Factory không khả dụng. Có vẻ như test_helper.rbnó không được tải.

Tôi đã thử các requirelệnh gọi khác nhau bao gồm một lệnh gọi có đường dẫn tuyệt đối đến test_helper.rbnhưng chúng không thành công tương tự như thế này:

$ script/console RAILS_ENV=test
>> require '/Users/ethan/project/contactdb/test/test_helper.rb'
  Errno::ENOENT: No such file or directory - 
  /Users/ethan/project/contactdb/config/environments/RAILS_ENV=test.rb

Grr. Argh.


1
Do đó, nếu bạn đã đặt thử nghiệm RAILS_ENV = trước script / console, nó sẽ hoạt động như bạn mong đợi.
Jared

Câu trả lời:


192

Đối với Rails <3.0

Chạy đi script/console --help. Bạn sẽ nhận thấy rằng cú pháp là script/console [environment], trong trường hợp của bạn là như vậy script/console test.

Tôi không chắc liệu bạn có phải yêu cầu trình trợ giúp kiểm tra hay không hoặc môi trường kiểm tra có thực hiện điều đó cho bạn hay không, nhưng với lệnh đó, ít nhất bạn sẽ có thể khởi động thành công vào env kiểm tra.

Như một phụ chú: Thực sự hơi kỳ lạ khi các mã nhị phân khác nhau trong script / có các cách khác nhau để thiết lập môi trường đường ray.

Đối với đường ray 3 và 4

Chạy đi rails c test. Thêm trước bundle execnếu bạn cần điều này cho môi trường ứng dụng hiện tại.

Đối với đường ray 5 và 6

Chạy đi rails console -e test.


63
Trong rails 3, nó chỉ làrails console [environment]
Idris Mokhtarzada

26
Đó là một chút không phù hợp bởi vì để khởi động server bạn gõrails server -e test
Jason

Trong Rails 5, điều này vẫn hoạt động. Và, bạn cần phải tải ít nhất một số phần trong môi trường của mình - trong trường hợp của tôi features/support/helpers.rblà không được tải tự động. Ngoài ra, Rack::Testkhông được tải.
Derrell Durrett

61

Trong Rails 3, chỉ cần làm rails console testhoặc rails console productionhoặc rails console development(là mặc định).



8

Đối với Rails 5.2.0: "Việc chuyển tên của môi trường làm đối số thông thường không được dùng nữa và sẽ bị xóa trong phiên bản Rails tiếp theo. Vui lòng sử dụng tùy chọn -e để thay thế."

rails c -e test

4

Bạn có thể chỉ định môi trường mà lệnh console sẽ hoạt động.

rails c [environment]

Ví dụ

1) Đối với giai đoạn

rails c staging

2) Đối với sản xuất

rails c production

Đối với nguồn và mô tả chi tiết: Dòng lệnh Rails


3

David Smith đúng, chỉ cần làm

script/console test

Lệnh trợ giúp sẽ cho biết lý do tại sao điều này hoạt động:

$ script/console -h
Usage: console [environment] [options]
    -s, --sandbox                    Rollback database modifications on exit.
        --irb=[irb]                  Invoke a different irb.
        --debugger                   Enable ruby-debugging for the console.

Đó là bit [môi trường] .


2

Tôi chia sẻ nỗi đau của người hỏi. Thực sự có ba câu hỏi riêng biệt ở đây, một số câu hỏi được giải quyết, một số câu hỏi thì không:

  1. Làm cách nào để bạn khởi động bảng điều khiển trong môi trường thử nghiệm?

    Đối với các phiên bản Rails gần đây bundle exec rails c testhoặc các cú pháp thay thế cho điều đó.

  2. Làm cách nào để bạn đảm bảo rằng test / test_helper.rb được tải vào phiên bảng điều khiển đó?

    Một cái gì đó giống như require './test/test_helper'phải làm điều đó.

    Đối với tôi, điều này trả về true, cho biết rằng nó chưa được tải khi tôi khởi động bảng điều khiển. Nếu câu lệnh đó trả về false, thì bạn chỉ lãng phí một vài lần nhấn phím, nhưng bạn vẫn tốt để tiếp tục.

  3. Sau khi test_helper được tải, bạn gọi các phương thức được định nghĩa trong đó như thế nào?

    Trong test_helper điển hình, các phương thức tùy chỉnh thường được định nghĩa là các phương thức phiên bản của ActiveSupport :: TestCase. Vì vậy, nếu bạn muốn gọi một trong số chúng, bạn cần một thể hiện của lớp đó. Bằng cách thử và sai, ActiveSupport :: TestCase.new có một tham số bắt buộc, vì vậy ... hãy chuyển nó đi.

    Nếu test_helper của bạn có một phương thức được gọi là create_user, bạn có thể gọi nó theo cách này: ActiveSupport::TestCase.new("no idea what this is for").create_user


Thay vì dùng thử hoặc lỗi - sử dụng đường ray dẫn API để tìm thấy những gì nó cần api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... nó có thể là để thử nghiệm mà là :randomtheo mặc định
Mirv - Matt

Chỉ có hai phương thức lớp đó được mô tả cho ActiveSupport :: TestCase, vì vậy tôi không rõ về lớp / mô-đun mà nó kế thừa initializephương thức của nó . Nhưng có vẻ như tham số mà nó mong đợi được lưu trữ như @NAMEtrên đối tượng đã tạo.
Nick Davies

1

Đảm bảo rằng bạn đã cài đặt GEM và bạn đã thêm dòng sau vào tệp môi trường.rb hoặc test.rb của mình.

config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :source => "http://gems.github.com"

0

Thử nghiệm Env

rails console test # or just rails c test

Env phát triển

rails console # or just rails c

0

Lệnh để chạy môi trường kiểm tra bảng điều khiển rails là

rails c -e test

hoặc là

RAILS_ENV=test rails c

nếu bạn đang đối mặt với vấn đề như

ActiveRecord::StatementInvalid:
   Mysql2::Error: Table 'DB_test.users' doesn't exist: SHOW FULL FIELDS FROM `users`

thì trước tiên bạn nên chuẩn bị DB thử nghiệm của mình bằng cách chạy

bundle exec rake db:test:prepare
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.