RSpec模拟对象属性赋值

6

我有一个rspec模拟对象,给它的属性赋了一个值。我正在努力让我的rspec测试达到预期。想知道语法是什么?代码如下:

def create
@new_campaign = AdCampaign.new(params[:new_campaign])
@new_campaign.creationDate = "#{Time.now.year}/#{Time.now.mon}/#{Time.now.day}"
if @new_campaign.save
  flash[:status] = "Success"
else
  flash[:status] = "Failed"
end end

这是一个测试

it "should able to create new campaign when form is submitted" do
  campaign_model = mock_model(AdCampaign)
  AdCampaign.should_receive(:new).with(params[:new_campaign]).and_return(campaign_model)
  campaign_model.should_receive(:creationDate).with("#{Time.now.year}/#{Time.now.mon}/#{Time.now.day}")campaign_model.should_receive(:save).and_return(true)
  post :create

  flash[:status].should == 'Success' 
  response.should render_template('create') end

问题在于我遇到了这个错误:
Spec::Mocks::MockExpectationError in 'CampaignController new campaigns should able to create new campaign when form is submitted' Mock "AdCampaign_1002" received unexpected message :creationDate= with ("2010/5/7")

那么我怎样才能设置对象属性分配的期望呢?谢谢。
2个回答

15
在 Ruby 中,没有所谓的“属性赋值”。在 Ruby 中,一切都是方法调用。因此,您可以像任何其他方法一样模拟 setter 方法:
campaign_model.should_receive(:creationDate=).with(...)

顺便说一句:测试打印出的诊断信息并不是仅仅为了展示。在这种情况下,消息已经告诉你所有需要知道的东西:

Spec::Mocks::MockExpectationError in 'CampaignController new campaigns should able to create new campaign when form is submitted' Mock "AdCampaign_1002" received unexpected message :creationDate= with ("2010/5/7")

正如你所看到的,你发布的消息已经告诉你需要进行mock的方法名称:

 unexpected message :creationDate= with ("2010/5/7")
                    ^^^^^^^^^^^^^^

0

在这里找到了一个相关链接here

只需在期望中添加 :creationDate= 而不是仅添加 :creationDate 即可。


1
你也可以使用(:createionDate=).with(<期望值>)。 - charleetm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接