在Rspec中使用expect匹配器

时间:2013-08-06 04:24:22

标签: rspec

我很确定这是一个令人难以置信的愚蠢问题,但我是Cucumber,Ruby和Rspec的新手,我正在努力学习一些非常基础的东西。

我安装了rspec gem,我想使用期望匹配器: 期待(实际).to eq(预期)

似乎我应该能够简单地要求rspec /期望然后执行这些命令,但它不起作用。

我错过了什么?

1.9.3-p448 :001 > require 'rspec'
 => true 
1.9.3-p448 :002 > require 'rspec/expectations'
 => true 
1.9.3-p448 :003 > expected = "this"
 => "this" 
1.9.3-p448 :004 > actual = "this"
 => "this" 
1.9.3-p448 :005 > expect(actual).to eq(expected)
NoMethodError: undefined method `expect' for main:Object
from (irb):5
from /Users/lpc/.rvm/rubies/ruby-1.9.3-p448/bin/irb:16:in `<main>'

奇怪的是“应该”正常工作。

1.9.3-p448 :006 > expected.should == actual
 => true 

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

如果使用Cucumber,您只需在env.rb文件中包含'rspec / expectations',然后在步骤定义中使用预期的语法。

env.rb:

 require 'rspec/expectations'

steps.rb:

 Then(/^I should be able to use rspec$/) do
   expected = "this"
   actual= "this"
   expect(actual).to eql(expected)
 end

我的错误是在ruby控制台中错误地测试了这种语法。你不能这样做,因为Cucumber为你做了一些自动化的东西。

“当黄瓜看到Spec :: Matchers和Spec :: Expectations模块定义时,它将隐含地将它们包含在执行步骤的World中。”

答案 1 :(得分:2)

我真的很想能够在Rails控制台中尝试expect()匹配器。我意识到我可以将它们包装在describe / it块中,但是我在控制台中没有得到有用的结果。

describe "basic rspec feasure" do it "should do my bidding" do expect(:a).to eq(:a) end; end
返回RSpec::Core::ExampleGroup::Nested_2

有没有人能够深入了解一个人如何做这样的事情?我很好奇发送通过/失败条件的路径在rspec内部是什么。我意识到这是rspec的非典型和高级用法,但我很好奇;)