2

我很确定这是一个非常愚蠢的问题,但我是 Cucumber、Ruby 和 Rspec 的新手,我正在努力解决一些非常基本的问题。

我安装了 rspec gem,我想使用期望匹配器:expect(actual).to eq(expected)

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

我错过了什么?

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 

谢谢你的帮助。

4

2 回答 2

2

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

环境.rb:

 require 'rspec/expectations'

步骤.rb:

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

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

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

于 2013-08-06T07:51:09.993 回答
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 的非典型和高级用法,但我很好奇;)

于 2013-08-21T16:59:38.240 回答