class method_1没有通过测试,但它可以在rails控制台中运行

时间:2014-01-18 07:41:02

标签: ruby-on-rails ruby rspec specifications

我有两个以下型号:

class Project < ActiveRecord::Base
 has_many :tasks, inverse_of: :project
 attr_accessible :tasks_attributes

 def method_1
  tasks.map |t|
    t.name
  end
 end

class Task < ActiveRecord::Base
 belongs_to :project, inverse_of: :tasks

 attr_accessible :name

 validates :name, presence: true
end

我正在为project_spec.rb编写测试。我测试了关联和验证,它们都很好。但不知怎的,我无法通过method_1的测试。我改变了method_1代码,只是为了检查。我得到的结果是[nil],即tasks.first是零。我不知道我错过了什么。

 def method_1
  [tasks.first]
 end

我的测试代码是,

...
let(:project) do
   build_stubbed(:project, :project_data)
end

describe "#method_1" do
 before do
   project.stub_chain(:task, :name).and_return("task A")
 end
 subject {project.method_1} 
  it "should be the name of the task of the project" do
    should eq ["task A"]
  end   
end

当我运行localhost:3000时,它有同样的问题。但是在rails控制台中,method_1也能正常工作。有人可以帮忙吗?它困扰了我好几天。

1 个答案:

答案 0 :(得分:0)

以下是一些可能有用的评论:

  • method_1依赖于tasks,但你已经存根task(单数),所以它没有任何效果。
  • 也许method_1在Rails控制台中工作,因为您在开发数据库中有与项目相关的任务
  • 使用localhost:3000的问题可能是由于任何数量的事情,因为你没有直接通过网络使用模型方法