Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby RSpec应该为真vs应该==真_Ruby_Rspec - Fatal编程技术网

Ruby RSpec应该为真vs应该==真

Ruby RSpec应该为真vs应该==真,ruby,rspec,Ruby,Rspec,以下两者之间有什么区别吗 something.should == true 及 这个惯例是:期望(某物)。是真的但是正确使用时没有区别。仅应根据表达式计算期望值为==true 见文件: Rspec测试: describe "is the equation true? " do let!(:add) { 5+5 == 10 } it "be_true" do add.should be_true #passes end it "expect be_true" d

以下两者之间有什么区别吗

something.should == true


这个惯例是:
期望(某物)。是真的
但是正确使用时没有区别。仅应根据表达式计算期望值为
==true

  • 见文件:

Rspec测试:

describe "is the equation true? " do
  let!(:add) { 5+5 == 10 }

  it "be_true" do
    add.should be_true #passes
  end

  it "expect be_true" do
    expect(add).to be_true #passes
  end

  it "== true" do
    add.should == true #passes
  end
end

字符串更新:

describe "is the equation true? " do
  let!(:add) { 5+5 == 10 }

  it "be_true" do
    add.should be_true #passes
  end

  it "expect be_true" do
    expect(add).to be_true #passes
  end

  it "== true" do
    add.should == true #passes
  end
end
字符串不是
==true
,因此它将失败,但它将作为
be\u true
传递,因为除了
false
nil
之外的任何内容都被视为
truthy
但是,这不是检查
字符串的方式


有关如何正确检查
字符串中的值的信息,请参见此示例

str = "happy dance!"
要查找文本是否在
字符串中,可以使用:
expect(str)。要包含(“快乐舞蹈!”)

否,没有区别


后者是前者的语法甜点。

这个问题的答案是错误的,如下所述,第一个测试是平等性测试,而第二个测试是真实性测试,第一个测试会失败,因为
有些东西!=true
而后面的将通过,因为在ruby中,除
nil
false
以外的任何顺序都是
truthy

require 'rspec'

describe "do something" do

  let(:something) { "hey" }
  it { something.should == true }
  it { something.should be_true }
end

仅限子孙后代:
expect(某物)。事实上,
被认为是编写规范的更新、更好的方式。
expect
语法完成了相同的任务,但并不依赖于猴子修补所有对象以获得
should
方法,这在极少数情况下会导致问题。尽管rspec仍然支持这两种方法。答案是不正确的,正如我在回答中所说的那样,存在差异below@feed_me_code我给出了一个例子,其中something.should==true和something.should\u true不一样,为了更清楚地说明这一点,我们将
be_-truthy
be_-falsy
添加到最新版本的rspec@feed_me_code请不要投票表决我的答案,因为这是一个明确的背景,可以显示差异,而且不需要向下证明,看一篇关于同一主题的博客文章:这取决于使用的上下文,检查我的答案below@feed_me_code没有理由争论,我只是想澄清和贡献知识,而不是参与争论。谢谢被否决的选民不应该害羞地解释他为什么否决这是根本错误的,正如我在对被接受答案的评论中所指出的那样。