2013-11-21 25 views
1

我有我的事件模型的方法:使用RSpec时Rails DateTime中的随机空间?

def when 
    self.starts_at.strftime("%a %b %e @ %-I:%M") 
    end 

其输出正确的轨道控制台或在网页上。

然而,做一个RSpec测试是这样的:

it "has simple date display" do 
    game = FactoryGirl.build(:event, starts_at: DateTime.parse("1/1/2014 3:30pm")) 
    game.when.should == "Wed Jan 1 @ 3:30" 
    end 

失败,因为:

1) Event has simple date display 
    Failure/Error: event.when.should == "Wed Jan 1 @ 3:30" 
     expected: "Wed Jan 1 @ 3:30" 
      got: "Wed Jan 1 @ 3:30" (using ==) 

为什么会出现在我的格式化过的时间随机空间?不应该为测试和控制台加载/运行相同的DateTime代码吗?

回答

2

您正在使用格式为%e的format指令,该指令用于填充空白的月份。这听起来像你想要的月份指令,这是%-d unpadded的一天。 Here are the docs

2

测试失败的原因是因为%e指令在strftime是:

%E - 当月天,填补空白的(1..31)

所以声明DateTime.parse("1/1/2014 3:30pm").strftime("%a %b %e @ %-I:%M")产生Wed Jan 1 @ 3:30(在1到9之间的天数之前预留了额外的空间)。

您可以使用%d指令来代替月份的零日填充。例如。

# Event model 
def when 
    self.starts_at.strftime("%a %b %d @ %-I:%M") 
end 

然后在您的规格:

it "has simple date display" do 
    game = FactoryGirl.build(:event, starts_at: DateTime.parse("1/1/2014 3:30pm")) 
    game.when.should == "Wed Jan 01 @ 3:30" 
end 
+0

+1,但我给了接受@Mori因为他带我到%-e这正是我之后。 – you786