【问题标题】:route spec doesn't pass but route works路线规范没有通过,但路线有效
【发布时间】:2016-06-28 00:07:38
【问题描述】:

当我转到 localhost:3000/api/guests/1 时,我得到了我的显示页面,但是当我运行规范时,它没有通过。

这是我的规格:

it 'the resource is under the correct namespace' do
  get '/api/guests/1'
  expect(response).to be_success
end

这是我的路线.rb:

Rails.application.routes.draw do
  namespace :api, defaults: { format: :json } do
    resources :gifts, only: :show
    resources :guests, only: [:index, :show] do
      resources :gifts, only: :index
    end
    resources :parties, only: [:index, :show]
  end
end

这是我的 RSpec 失败消息:

ActiveRecord::RecordNotFound:
   Couldn't find Guest with 'id'=1

我不太确定从哪里寻找问题。

【问题讨论】:

    标签: ruby-on-rails ruby json rspec


    【解决方案1】:

    您没有创建 Guest 对象,因此您的测试失败,因为它找不到它。在您致电get 之前,您应该创建您的访客。比如:

    user = Guest.create!(:username => "jdoe")
    

    然后试着像这样得到它:

    get "/api/guests/#{user.id}"
    

    注意!您的测试数据库与您的开发数据库不同。因此,您很可能在 dev 中拥有该用户,但在 test 中没有。

    【讨论】:

    • 好的,这行得通。我的第二个规范是这样的:它“显示页面显示正确的信息”确实得到 '/api/guests/1' expect(json['name']).to eq('John Smith') expect(json['age ']).to eq(45) expect(json['favorite_color']).to eq('Blue') end
    • 我需要做些什么来让 rspec 访问我已经播种的数据库吗?
    • 不,您应该有单独的数据库,并且您必须在每次测试之前准备好所需的变量。您应该阅读一些关于 Rspec 测试及其组织的博客,例如:robots.thoughtbot.com/how-we-test-rails-applications。在开始测试之前,有各种方法可以初始化和重用所需的变量。
    • 你要我告诉你如何以错误的方式做事,你希望我告诉你什么?不,没有办法播种任何 DB rspec 正在使用的种子,如果有办法这样做,那将是错误的。规范有其目的,它们依赖于您在测试中为特定条件创建的数据,而数据库的某些当前快照则不会这样做。取而代之的是,Rails 中的测试具有特性和工厂以及许多其他东西,而种子是针对您的开发和生产的。我知道,重新指向数据库听起来很诱人,但事实并非如此。
    • 嗯,这很有趣。也许有些事情我不知道,并且您的规格是以我不熟悉的方式设置的。在这种情况下,您的设置非常具体。检查你的项目,看看你能找到什么。尝试使用测试中的一些特定内容,例如上面示例中的“John Smith”,在项目中对此进行 grep,您可能会得到线索。
    【解决方案2】:

    我发现了解决方案:bundle exec rake db:seed RAILS_ENV=test --trace

    我第一次运行这行时有一个错字。糟糕!

    【讨论】:

    • 这可能是为测试创建数据的另一种方式。虽然,我不会推荐它。虽然它速度更快,但它更难维护。但就您的目的而言,概率并不重要。
    • 而且,这并不意味着我对您的特定问题的回答是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多