【问题标题】:What are the key differences between running rake test, and running ruby -Itest test/... (Rails 4.1)运行 rake 测试和运行 ruby​​ -Itest test/...(Rails 4.1)之间的主要区别是什么
【发布时间】:2023-03-30 09:15:01
【问题描述】:

我有一个非常简单的 rails 控制器测试,它的行为取决于它的运行方式:

当我使用以下方式运行它时: RAILS_ENV=test ruby -Itest test/controllers/news_controller_test.rb 测试通过了(我使用RAILS_ENV 尝试使其与rake test 尽可能相似。

使用rake test 运行时,测试失败并显示:

12) 错误:NewsController::admin#test_0003_creates new news post: ActionView::MissingTemplate:缺少模板新闻/创建, 应用程序/使用 {:locale=>[:en], :formats=>[:html] 创建, :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :jbuilder, :coffee]}。搜索:* “/home/emery/eop/portal/app/views”* "/home/emery/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/kaminari-0.15.1/app/views"

test/controllers/news_controller_test.rb:73:in `block (4 levels) in <top (required)>'
test/controllers/news_controller_test.rb:72:in `block (3 levels) in <top (required)>'

这只是在rake test 下测试失败但在ruby -Itest 下通过的一种特定情况......还有很多其他的行为方式。一些,比如这个,缺少他们不应该需要的模板,另一些在应该重定向用户时返回成功,而另一些则更深奥。这就是为什么我的问题更笼统,rake testRAILS_ENV ruby -Itest ... 之间的主要区别是什么?我希望能够自己调试这些。

我的堆栈是 Rails 4.1rc1,使用 minitest-spec-rails(主分支)。

为了完整起见,这里是上面错误的测试和控制器代码:

控制器动作非常简单:

  def create
    @news = News.new(safe_params)
    if @news.save
      redirect_to news_index_path
    else
      render :new
    end 
  end 

代码重定向或呈现新模板,因此 news/create 确实不存在,但它不应该是必需的。

控制器测试代码为:

let(:editor) { User.create! first_name: 'Malcom', last_name: 'Reynolds', email: 'captain@firefly.com', password: 'hmm' }

  before do
    subject.login editor
  end

...

  it 'creates a new news post' do
     assert_difference 'News.count', 1 do                                                                                                                                                                                                                                                                                                                                  
       post :create, news: { subject: 'abcd', body: 'rst' }
     end
     assert_redirected_to news_index_path
  end

subject.login是应用控制器上的自定义登录功能)

【问题讨论】:

  • 我遇到了同样的问题并绞尽脑汁。你有什么发现吗?
  • 很遗憾,我什么也没想到。我基本上必须接受我的一些测试失败,并了解哪些测试。我有两个测试未决。首先是更新到 Rails 4.1,因为我在 4.1.rc2 上运行。二是切换到rspec。如果我发现任何东西,我会更新这个。

标签: ruby-on-rails unit-testing ruby-on-rails-4 minitest


【解决方案1】:

结果证明这是我的其他控制器测试用例之一的问题。我有一个控制器测试,它模拟了一些调用,但这些模拟在无意中是永久性的,改变了应用程序控制器。这以不同的方式破坏了剩余的控制器测试用例。

所以这种情况下的关键区别在于,运行 rake test 会运行所有测试用例,而 ruby​​ -Itest 只运行一个测试。

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多