【问题标题】:Rails test ok but when running with guard they failRails 测试正常,但是当带着警卫运行时,它们失败了
【发布时间】:2018-03-27 03:05:01
【问题描述】:

我在这里创建了一个有问题的示例应用程序 https://github.com/jean-francois-labbe/rails-guard-not-working

这只是一个简单的脚手架,带有 rails 5.1.4 和 ruby​​ 2.4.2 rails g scaffold user username firstname creation:datetime rails db:migrate bundle exec rails test # => tests ok bundle exec guard # => 3 tests will fail

我在 Gemfile 中添加了 guardguard-minitest

有人遇到过这个问题吗?

测试结果如下:

~/Workspace/guard-tests-fail(master ✗) bundle exec rails test
Run options: --seed 23398

Running:

........

Finished in 0.649120s, 12.3244 runs/s, 15.4055 assertions/s.
8 runs, 10 assertions, 0 failures, 0 errors, 0 skips


~/Workspace/guard-tests-fail(master ✗) bundle exec guard     
19:41:31 - INFO - Guard::Minitest 2.4.6 is running, with Minitest::Unit 5.10.3!
19:41:31 - INFO - Running: all tests
Run options: --guard --seed 38654

Running:

.....F

Failure:
MeetingsControllerTest#test_should_create_meeting [/home/jeff/Workspace/guard-tests-fail/test/controllers/meetings_controller_test.rb:19]:
"Meeting.count" didn't change by 1.
Expected: 3
  Actual: 2


bin/rails test test/controllers/meetings_controller_test.rb:18

F

Failure:
MeetingsControllerTest#test_should_destroy_meeting [/home/jeff/Workspace/guard-tests-fail/test/controllers/meetings_controller_test.rb:42]:
"Meeting.count" didn't change by -1.
Expected: 1
  Actual: 2


bin/rails test test/controllers/meetings_controller_test.rb:41

F

Failure:
MeetingsControllerTest#test_should_update_meeting [/home/jeff/Workspace/guard-tests-fail/test/controllers/meetings_controller_test.rb:38]:
Expected response to be a <3XX: redirect>, but was a <422: Unprocessable Entity>


bin/rails test test/controllers/meetings_controller_test.rb:36




Finished in 1.261359s, 6.3424 runs/s, 6.3424 assertions/s.
8 runs, 8 assertions, 3 failures, 0 errors, 0 skips
19:41:35 - INFO - Guard is now watching at '/home/jeff/Workspace/guard-tests-fail'

使用与 Rails 测试相同的种子进行保护

~/Workspace/guard-tests-fail(master ✗) bundle exec guard
21:36:17 - INFO - Guard::Minitest 2.4.6 is running, with Minitest::Unit 5.10.3!
21:36:17 - INFO - Running: all tests
Run options: --guard --seed 23398

# Running:

...F

Failure:
MeetingsControllerTest#test_should_destroy_meeting [/home/jeff/Workspace/guard-tests-fail/test/controllers/meetings_controller_test.rb:42]:
"Meeting.count" didn't change by -1.
Expected: 1
  Actual: 2


bin/rails test test/controllers/meetings_controller_test.rb:41

..F

Failure:
MeetingsControllerTest#test_should_update_meeting [/home/jeff/Workspace/guard-tests-fail/test/controllers/meetings_controller_test.rb:38]:
Expected response to be a <3XX: redirect>, but was a <422: Unprocessable Entity>


bin/rails test test/controllers/meetings_controller_test.rb:36

F

Failure:
MeetingsControllerTest#test_should_create_meeting [/home/jeff/Workspace/guard-tests-fail/test/controllers/meetings_controller_test.rb:19]:
"Meeting.count" didn't change by 1.
Expected: 3
  Actual: 2


bin/rails test test/controllers/meetings_controller_test.rb:18




Finished in 1.397142s, 5.7260 runs/s, 5.7260 assertions/s.
8 runs, 8 assertions, 3 failures, 0 errors, 0 skips
21:36:21 - INFO - Guard is now watching at '/home/jeff/Workspace/guard-tests-fail'
[1] guard(main)> 

复制步骤

1) 只需创建一个新项目(rails new demo)

2) 生成一个脚手架(rails g scaffold用户用户名)

3) rails test => rails test 没问题

4) 在 Gemfile 中添加 gem 'guard' 和 gem 'guard-minitest'。并运行捆绑

5) 运行guard init minitest。

6) bundle exec guard => 你的测试会失败

堆栈跟踪

轨道测试

.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:107:in `block (3 levels) in run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:204:in `capture_exceptions'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:104:in `block (2 levels) in run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:255:in `time_it'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:103:in `block in run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:350:in `on_signal'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:275:in `with_info_handler'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:102:in `run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:839:in `run_one_method'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:324:in `run_one_method'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:311:in `block (2 levels) in run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:310:in `each'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:310:in `block in run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:350:in `on_signal'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:337:in `with_info_handler'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:309:in `run'
.gem/ruby/2.4.1/gems/railties-5.1.4/lib/rails/test_unit/line_filtering.rb:9:in `run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:159:in `block in __run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:159:in `map'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:159:in `__run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:136:in `run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:63:in `block in autorun'
.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application.rb:171:in `fork'
.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application.rb:171:in `serve'
.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application.rb:141:in `block in run'
.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application.rb:135:in `loop'
.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application.rb:135:in `run'
.gem/ruby/2.4.1/gems/spring-2.0.2/lib/spring/application/boot.rb:19:in `<top (required)>'
.rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
.rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'

警卫

.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:107:in `block (3 levels) in run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:204:in `capture_exceptions'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:104:in `block (2 levels) in run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:255:in `time_it'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:103:in `block in run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:350:in `on_signal'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:275:in `with_info_handler'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest/test.rb:102:in `run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:839:in `run_one_method'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:324:in `run_one_method'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:311:in `block (2 levels) in run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:310:in `each'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:310:in `block in run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:350:in `on_signal'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:337:in `with_info_handler'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:309:in `run'
.gem/ruby/2.4.1/gems/railties-5.1.4/lib/rails/test_unit/line_filtering.rb:9:in `run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:159:in `block in __run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:159:in `map'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:159:in `__run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:136:in `run'
.gem/ruby/2.4.1/gems/minitest-5.10.3/lib/minitest.rb:63:in `block in autorun'

【问题讨论】:

  • 您到底看到了什么样的失败?两种运行测试的方式是否可能需要一组略有不同的文件?
  • @hoffm 我已经在问题中添加了测试结果
  • 会不会是订单问题?尝试以两种方式使用相同的种子运行测试。
  • 我在使用与 rails 测试相同的种子执行时添加了保护结果,但仍然失败
  • 我的另一个想法是他们使用不同的配置,即spec_helper.rbrails_helper.rb。您能否添加一些 puts 日志记录,看看您是否可以在测试启动时发现正在加载的文件或加载顺序的差异?

标签: ruby-on-rails ruby minitest guard


【解决方案1】:

这是guard-minitestspring 的问题。前往您的Guardfile 并将此spring 命令配置添加到初始化中:

# Guardfile

guard "minitest", spring: "bin/rails test" do
  # ...
end

有一些半相关的讨论hereguard-minitest README 说这是“由于处理参数和为选定文件运行测试的复杂性”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2012-11-09
    • 2013-10-17
    • 2015-01-25
    • 1970-01-01
    相关资源
    最近更新 更多