테스트 환경에서 Rails 콘솔을 실행하고 test_helper.rb를로드하는 방법은 무엇입니까?


121

배경 : 저는 Thoughtbot의 "Factory Girl"gem에 문제가 있습니다. with is used to create objects to use in unit and other tests. 콘솔로 이동하여 다른 Factory Girl 호출을 실행하여 무슨 일이 일어나고 있는지 확인하고 싶습니다. 예를 들어, 거기에 들어가고 싶습니다.

>> Factory(:user).inspect

다른 환경에서 콘솔을 실행할 수 있다는 것을 알고 있습니다.

$ 스크립트 / 콘솔 RAILS_ENV = 테스트

하지만 그렇게하면 Factory 클래스를 사용할 수 없습니다. test_helper.rb로드되지 않은 것처럼 보입니다 .

require절대 경로가있는 호출을 포함하여 다양한 호출을 시도했지만 test_helper.rb이와 비슷하게 실패합니다.

$ 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. 아아.


1
따라서 스크립트 / 콘솔 앞에 RAILS_ENV = test를 배치했다면 예상대로 작동했을 것입니다.
Jared

답변:


192

3.0 미만의 레일 용

을 실행 script/console --help합니다. 구문이 script/console [environment]이고 귀하의 경우 script/console test.

테스트 도우미가 필요한지 또는 테스트 환경이 필요한지 확실하지 않지만 해당 명령을 사용하면 적어도 테스트 환경으로 성공적으로 부팅 할 수 있어야합니다.

참고로 : script /의 다양한 바이너리가 rails 환경을 설정하는 다른 방법을 가지고 있다는 것은 참으로 이상합니다.

Rails 3 및 4의 경우

을 실행 rails c test합니다. bundle exec현재 앱 환경에 필요한 경우 앞에 추가 하세요.

Rails 5 및 6의 경우

을 실행 rails console -e test합니다.


63
3 번 레일에서는 단지rails console [environment]
Idris Mokhtarzada 2010

26
입력 한 서버를 시작하기 때문에 약간 일치하지 않습니다rails server -e test
Jason

Rails 5에서는 여전히 작동합니다. 그리고 최소한 환경의 일부를로드해야합니다. 제 경우 features/support/helpers.rb에는 자동으로로드되지 않았습니다. 또한 Rack::Test로드되지 않습니다.
Derrell Durrett 2016

61

Rails 3에서는 rails console test또는 rails console production또는 rails console development(기본값) 만 수행 합니다.



8

Rails 5.2.0의 경우 : "환경 이름을 일반 인수로 전달하는 것은 더 이상 사용되지 않으며 다음 Rails 버전에서 제거됩니다. 대신 -e 옵션을 사용하십시오."

rails c -e test

4

콘솔 명령이 작동해야하는 환경을 지정할 수 있습니다.

rails c [environment]

1) 스테이징 용

rails c staging

2) 생산 용

rails c production

소스 및 자세한 설명 : Rails 명령 줄


3

David Smith가 맞습니다.

script/console test

도움말 명령은 이것이 작동하는 이유를 보여줍니다.

$ 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.

그것은이다 [환경] 비트.


2

나는 질문자의 고통을 공유합니다. 여기에는 실제로 세 가지 별도의 질문이 있으며, 그중 일부는 해결되고 일부는 해결되지 않습니다.

  1. 테스트 환경에서 콘솔을 어떻게 시작합니까?

    최신 Rails 버전의 경우 bundle exec rails c test, 또는 이에 대한 대체 구문.

  2. test / test_helper.rb가 해당 콘솔 세션에로드되었는지 어떻게 확인합니까?

    같은 일 require './test/test_helper'을해야합니다.

    나에게 이것은 true를 반환하여 콘솔을 시작할 때 아직로드되지 않았 음을 나타냅니다. 해당 문이 거짓을 반환하면 몇 번의 키 입력 만 낭비한 것입니다.하지만 여전히 사용할 수 있습니다.

  3. test_helper가로드되면 여기에 정의 된 메소드를 어떻게 호출합니까?

    일반적인 test_helper에서 사용자 지정 메서드는 일반적으로 ActiveSupport :: TestCase의 인스턴스 메서드로 정의됩니다. 따라서 그중 하나를 호출하려면 해당 클래스의 인스턴스가 필요합니다. 시행 착오로 ActiveSupport :: TestCase.new에는 필수 매개 변수가 하나 있으므로 전달하십시오.

    test_helper에 create_user라는 메서드가있는 경우 다음과 같이 호출 할 수 있습니다. ActiveSupport::TestCase.new("no idea what this is for").create_user


시행 착오보다는 레일스 API 가이드를 사용하여 필요한 것을 찾으십시오. api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... 아마도 :random기본적으로 테스트 순서 일 것입니다
Mirv-Matt

ActiveSupport :: TestCase에 대해 설명 된 두 가지 클래스 메서드 만 있으므로 initialize메서드를 상속하는 클래스 / 모듈이 무엇인지 명확하지 않습니다 . 그러나 예상되는 매개 변수 @NAME가 생성 된 객체에 저장되는 것처럼 보입니다 .
Nick Davies

1

GEM을 설치하고 environment.rb 또는 test.rb 파일에 다음 행을 추가했는지 확인하십시오.

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

0

테스트 환경

rails console test # or just rails c test

개발 환경

rails console # or just rails c

0

Rails 콘솔 테스트 환경을 실행하는 명령은 다음과 같습니다.

rails c -e test

또는

RAILS_ENV=test rails c

다음과 같은 문제에 직면하고 있다면

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

그런 다음 먼저 실행하여 테스트 DB를 준비해야합니다.

bundle exec rake db:test:prepare
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.