2016-05-30 56 views
0

試圖做類似我如何使用`或`在平等的RSpec匹配器(滑軌)

expect(body['classification']).to (be == "Apt") || (be == "House") 

背景:

這是測試一個JSON API響應。

問題:

我想測試通過如果任一「公寓」或「豪斯醫生」被返回。但在測試中,它只是比較第一個值「Apt」。

Failure/Error: expect(body['classification']).to be == "Apt" or be == "House" 

expected: == "Apt" 
got: "House" 

先前的解決方案:

這裏有一個解決方案, (Equality using OR in RSpec 2),但其現在貶值了,我無法使它工作。

文檔:

也沒能找到這樣的例子的文檔(https://www.relishapp.com/rspec/rspec-expectations/v/3-4/docs/built-in-matchers/equality-matchers

在這是可能的嗎?

回答

2

如何:

expect(body['classification'].in?(['Apt', 'Hourse']).to be_truthy 

或者

expect(body['classification']).to eq('Apt').or eq('Hourse') 

甚至這樣的:在此基礎上link

expect(body['classification']).to satify { |v| v.in?(['Apt', 'Hourse']) } 
1
expect(body['classification']).to eq("Apt").or eq("House") 

複合期望

匹配器可使用和或或使化合物期望

使用or到鏈的期望」

RSpec.describe StopLight, "#color" do 
    let(:light) { StopLight.new } 
    it "is green, yellow or red" do 
    expect(light.color).to eq("green").or eq("yellow").or eq("red") 
    end 
可以由