Как проверить количество аргументов в RSpec? - PullRequest
0 голосов
/ 19 февраля 2012

Как проверить, что данный вспомогательный метод принимает только один аргумент?

Я думал о том, чтобы сделать это:

describe "#textile" do
  it "should take only one argument" do
    textile().should raise_error
  end
end

, но это, похоже, все еще нарушает тест с ошибкой wrong number of arguments 0 for 1.

Ответы [ 2 ]

1 голос
/ 04 июля 2013

На самом деле, вы можете проверить арность напрямую.

>> method(:hello).arity
=> 2

Вы можете получить разные ответы на основе заданных значений по умолчанию, а также любые *args.

Вы захотите прочитайте документацию , которая описывает это:

Возвращает указание количества аргументов, принятых методом.Возвращает неотрицательное целое число для методов, которые принимают фиксированное количество аргументов.Для методов Ruby, которые принимают переменное число аргументов, возвращает -n-1, где n - количество обязательных аргументов.Для методов, написанных на C, возвращает -1, если вызов принимает переменное число аргументов.

Итак, в rspec вы бы написали свой тест соответственно, тестируя arity, а не тестируя, если он вызывает ошибкиили нет.

1 голос
/ 19 февраля 2012

Независимо от того, почему вы хотите проверить это, вот один из способов написать это:

describe "#textile" do
  it "should fail when given no arguments" do
    expect { textile() }.to raise_error ArgumentError
  end

  it "should accept one argument" do
    expect { textile("foo") }.not_to raise_error ArgumentError
  end
end

Обратите внимание, что вы могли бы опустить ArgumentError и просто сказать, что эти вызовы должны или не должны вызывать ошибку, но, определенно говоря, они должны или не должны вызывать ArgumentError, вы изолируете случай, который вы пытаетесь указать. textile("foo") может вызвать другое исключение, но все равно пройдет второй пример.

...