rails,devise,rspec,capybara测试在破坏用户的依赖时失败

时间:2014-04-04 19:33:28

标签: ruby-on-rails rspec devise capybara

我正在尝试进行测试通过,在删除设计注册时,删除用户模型的依赖项。这主要是好奇心问题,因为它似乎在手动完成时起作用,但我从未放弃机会去了解我做错了什么。

这是设置 用户模型:

class User < ActiveRecord::Base
  has_many :projects, :dependent => :destroy

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

项目模型:

class Project < ActiveRecord::Base
  belongs_to :user
  has_many :conts
  has_many :models

  validates :name, presence: true
  after_validation :parameterize_and_underscore_name
end

失败的测试:

describe  "cancel account" do
  scenario "deletes all projects associated with user", :focus do
    # @user created in a prior before loop
    project = create(:project)
    @user.projects << project

    # both pass
    User.all.size.should == 1
    Project.all.size.should == 1

    # also passes
    User.find(1).projects.first.should == @project

    click_button "Cancel my account"

    # passes
    page.should have_content "Bye! Your account was successfully cancelled. We hope to see you again soon."

    # passes
    User.all.size.should == 0
    # fails
    Project.all.size.should == 0
  end
end

失败消息是:

Failure/Error: Project.all.size.should == 0
       expected: 0
            got: 1 (using ==)

正如我所说,手动执行此操作时,生成的SQL确实有效:

User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
   (0.2ms)  BEGIN
  Project Load (3.9ms)  SELECT "projects".* FROM "projects" WHERE "projects"."user_id" = $1  [["user_id", 1]]
  SQL (0.5ms)  DELETE FROM "projects" WHERE "projects"."id" = $1  [["id", 1]]
  SQL (0.3ms)  DELETE FROM "users" WHERE "users"."id" = $1  [["id", 1]]
   (0.7ms)  COMMIT

那么,我是否应该注意某些问题(或者我完全处于错误的球场)或者这是我应该让开发人员知道的错误。如果它是一个bug,它是与devise,rspec还是capybara相关的bug(我怎么知道?)

备注:

我尝试过使用和不使用:js =&gt;是的,但没有区别

0 个答案:

没有答案