2013-08-06 62 views
2

我敢肯定这是一个令人难以置信的愚蠢问题,但我是Cucumber,Ruby和Rspec的新手,我正在为一些非常基础的事情而苦苦挣扎。在Rspec中使用期望匹配器

我安装了RSpec的宝石,我想用期望的匹配: 预期(实际)。为了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

如果使用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 

我的错误是在mistakingly红宝石控制台测试此语法。你不能这样做,因为黄瓜为你做了一些automagic的东西。

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

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的非典型和高级用法,但我很好奇;)

+1

'test = describe“basic rspec feasure”do it“should do my bidding”do expect(:a).to eq(: a)结束;如果测试通过,结束''test.run'将是真的 – ivanxuu