RSpec: ¿Cómo puedo utilizar la matriz incluyen comparador en la espera de la sintaxis

Yo uso nueva rspec sintaxis (expect en lugar de should) y me gustaría probar si una serie incluye elementos de otro conjunto. En la antigua sintaxis sería:

array1.should include(array2)

En la nueva sintaxis traté de escribir:

expect(array1).to include(array2)

pero tengo un error (que es bastante razonable):

TypeError: wrong argument type Array (expected Module)

Entonces escribí:

expect(array1).to be_include(array2)

pero es feo 😉
ACTUALIZACIÓN: y no funcionó: al parecer es de cheks si matriz2 es el elemento de array1 no se si todos los elementos de matriz2 están incluidos en matriz1.

Por último, me escribió:

expect(array1 & array2).to eq(array2)

pero no es la más bonita de la solución. ¿Conoces alguna mejor?

InformationsquelleAutor mrzasa | 2013-02-15

3 Kommentare

  1. 73

    Necesita splat los argumentos cuando se les pasa a la matriz comparador:

    expect(array1).to include(*array2)

    Esto es porque normalmente la lista de literales, por ejemplo:

    expect([1, 2, 3]).to include(1, 2)

    Que dijo, expect(array1).to include(array2) no debe fallar con un error extraño como lo tienes, y en el hecho de que funciona y que pasa en un ejemplo como:

      it 'includes a sub array' do
        array2 = ["a"]
        array1 = [array2]
        expect(array1).to include(array2)
      end
    • ¿cómo puedo probar la no inclusión? Traté de not_to include pero se generó un error: expect([1, 2, 3]).not_to include(1) plantea RSpec::Expectations::ExpectationNotMetError: expected [1, 2, 3] not to include 1
    • Su ejemplo está fallando porque 1 es, de hecho, incluido en [1,2,3], pero que estás diciendo rspec a esperar que no lo sea. Esto pasa: expect([1, 2, 3]).not_to include(4).
  2. 3

    Para probar si una matriz es subconjunto de otro de la matriz de su perhapse buena idea introducir conjunto. Y entonces usted puede escribir como este… (Solución utiliza Set#subconjunto?)

    require "set"
    
    describe "Small test" do
      let(:array1) { %w{a b c d} }
      let(:array2) { %w{b c} }
    
      let(:array1_as_set) { array1.to_set }
      let(:array2_as_set) { array2.to_set }
    
      subject { array2_as_set }
    
      context "inclusion of w/\"expect\"" do
        it { expect(subject).to be_subset(array1_as_set) }
      end
    
      context "inclusion of w/\"should\"" do
        it { should be_subset(array1_as_set) }
      end
    
    end

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea