Active LDAP模型上的存根只能运行一次

时间:2012-03-09 12:31:59

标签: ruby-on-rails ruby rspec ldap

我正在使用RSpec测试我的RoR应用程序,并在内部使用ActiveLDAP。我现在正在为一个通过ActiveLDAP创建新对象的控制器编写规范,所以我写了几行来模仿创建记录的行为:

before(:each) do
  @sample_attributes = {"a" => "b", "c" => "d"}
  @cu = Cloud::User.new
  @cu.stub(:save).and_return false
  @cu.stub(:attributes=).with(@sample_attributes).and_return @sample_attributes
  Cloud::User.stub(:new).and_return @cu
end

这样做的目的是允许对@cu模型提出期望,以确保它将针对它运行某些命令。像这样:

it "should save the new cloud user" do
  @cu.should_receive(:save).and_return false
  post 'create', :cloud_user => @sample_attributes
end

it "should set the attributes of the new cloud user" do
  @cu.should_receive(:attributes=).with(@sample_attributes).and_return @sample_attributes
  post 'create', :cloud_user => @sample_attributes
end

非常简单,对吧?那么这就是问题所在。第一个成功,但第二个总是抛出这个错误:

private method `new' called for #<Class:0x007f8bcad775c8>

当它在控​​制器中运行此行时:

@cloud_user = Cloud::User.new

不,那不是私人方法。并且EXACT SAME LINE在第一次测试中工作正常。此外,它不是个人测试的固有内容。如果我颠倒了两个测试的顺序,则设置属性测试成功,保存用户测试失败。基本上,无论哪一个先运行,它都会成功,无论哪个运行第二个都会失败。

为什么?

有没有人有任何想法?我不得不认为它与stub命令如何与ActiveLDAP一起工作有关,但我不知道。看起来很简单!

0 个答案:

没有答案