RSpec - Матчеры
Если вы помните наш оригинальный пример Hello World, он содержал строку, которая выглядела так:
expect(message).to eq "Hello World!"
Ключевое слово eql - это RSpec«Совпадение». Здесь мы познакомим вас с другими типами сопоставителей в RSpec.
Сопоставители равенства / идентичности
Сопоставители для проверки равенства объектов или значений.
Матчер | Описание | пример |
---|---|---|
экв | Проходит при фактическом == ожидаемом | ожидать (фактический). |
eql | Проходит, когда actual.eql? (Ожидается) | ожидать (фактический) .to eql ожидается |
быть | Проходит при фактическом. Равном? (Ожидается) | ожидать (фактический). ожидаться |
равный | Также проходит, когда actual.equal? (Ожидается) | ожидать (фактический). равно ожидаемому |
пример
describe "An example of the equality Matchers" do
it "should show how the equality Matchers work" do
a = "test string"
b = a
# The following Expectations will all pass
expect(a).to eq "test string"
expect(a).to eql "test string"
expect(a).to be b
expect(a).to equal b
end
end
Когда приведенный выше код будет выполнен, он выдаст следующий результат. На вашем компьютере количество секунд может немного отличаться -
.
Finished in 0.036 seconds (files took 0.11901 seconds to load)
1 example, 0 failures
Сравнительные сопоставители
Матчеры для сравнения со значениями.
Матчер | Описание | пример |
---|---|---|
> | Проходит при фактическом> ожидаемом | ожидать (фактический). быть> ожидаемым |
> = | Проходит, когда фактическое> = ожидаемое | ожидать (фактический). быть> = ожидаемым |
< | Проходит при фактическом <ожидаемом | ожидать (фактический). быть <ожидаемым |
<= | Проходит при фактическом <= ожидаемом | ожидать (фактический). быть <= ожидаемым |
be_between включительно | Проходит, если фактическое значение <= мин. И> = макс. | ожидать (фактический). to be_between (min, max) .inclusive |
be_between эксклюзивный | Проходит, если фактическое значение <мин. И> макс. | ожидать (фактический). to be_between (min, max) .exclusive |
соответствие | Проходит, когда фактическое совпадает с регулярным выражением | ожидать (фактическое). соответствовать (/ регулярное выражение /) |
пример
describe "An example of the comparison Matchers" do
it "should show how the comparison Matchers work" do
a = 1
b = 2
c = 3
d = 'test string'
# The following Expectations will all pass
expect(b).to be > a
expect(a).to be >= a
expect(a).to be < b
expect(b).to be <= b
expect(c).to be_between(1,3).inclusive
expect(b).to be_between(1,3).exclusive
expect(d).to match /TEST/i
end
end
Когда приведенный выше код будет выполнен, он выдаст следующий результат. На вашем компьютере количество секунд может немного отличаться -
.
Finished in 0.013 seconds (files took 0.11801 seconds to load)
1 example, 0 failures
Сопоставители классов / типов
Матчеры для проверки типа или класса объектов.
Матчер | Описание | пример |
---|---|---|
be_instance_of | Проходит, если фактический является экземпляром ожидаемого класса. | ожидать (фактический). to be_instance_of (ожидаемый) |
be_kind_of | Проходит, если фактический является экземпляром ожидаемого класса или любого из его родительских классов. | ожидать (фактический). to be_kind_of (ожидаемый) |
response_to | Проходит, когда фактический реагирует на указанный метод. | ожидать (фактическое). to response_to (ожидаемое) |
пример
describe "An example of the type/class Matchers" do
it "should show how the type/class Matchers work" do
x = 1
y = 3.14
z = 'test string'
# The following Expectations will all pass
expect(x).to be_instance_of Fixnum
expect(y).to be_kind_of Numeric
expect(z).to respond_to(:length)
end
end
Когда приведенный выше код будет выполнен, он выдаст следующий результат. На вашем компьютере количество секунд может немного отличаться -
.
Finished in 0.002 seconds (files took 0.12201 seconds to load)
1 example, 0 failures
Истинно / неверно / ноль совпадений
Сопоставители для проверки того, является ли значение истинным, ложным или нулевым.
Матчер | Описание | пример |
---|---|---|
быть правдой | Проходит при фактическом == истина | ожидать (фактический). быть правдой |
быть ложным | Проходит при фактическом == ложном | ожидать (фактическое). быть ложным |
be_truthy | Проходит, если фактическое значение не является ложным или нулевым | ожидать (фактический) .to be_truthy |
be_falsey | Проходит, если фактическое значение ложно или равно нулю | ожидать (фактическое) .to be_falsey |
be_nil | Проходит, когда фактическое значение равно нулю | ожидать (фактический) .to be_nil |
пример
describe "An example of the true/false/nil Matchers" do
it "should show how the true/false/nil Matchers work" do
x = true
y = false
z = nil
a = "test string"
# The following Expectations will all pass
expect(x).to be true
expect(y).to be false
expect(a).to be_truthy
expect(z).to be_falsey
expect(z).to be_nil
end
end
Когда приведенный выше код будет выполнен, он выдаст следующий результат. На вашем компьютере количество секунд может немного отличаться -
.
Finished in 0.003 seconds (files took 0.12301 seconds to load)
1 example, 0 failures
Сопоставители ошибок
Матчеры для тестирования, когда блок кода вызывает ошибку.
Матчер | Описание | пример |
---|---|---|
Raise_error (ErrorClass) | Проходит, когда блок вызывает ошибку типа ErrorClass. | ожидайте {block}. to raise_error (ErrorClass) |
Raise_error ("сообщение об ошибке") | Проходит, когда блок вызывает ошибку с сообщением об ошибке. | ожидайте {block} .to raise_error («сообщение об ошибке») |
Raise_error (ErrorClass, «сообщение об ошибке») | Проходит, когда блок вызывает ошибку типа ErrorClass с сообщением «error message» | ожидайте {block} .to raise_error (ErrorClass, «сообщение об ошибке») |
пример
Сохраните следующий код в файл с именем error_matcher_spec.rb и запустите его с помощью этой команды - rspec error_matcher_spec.rb.
describe "An example of the error Matchers" do
it "should show how the error Matchers work" do
# The following Expectations will all pass
expect { 1/0 }.to raise_error(ZeroDivisionError)
expect { 1/0 }.to raise_error("divided by 0")
expect { 1/0 }.to raise_error("divided by 0", ZeroDivisionError)
end
end
Когда приведенный выше код будет выполнен, он выдаст следующий результат. На вашем компьютере количество секунд может немного отличаться -
.
Finished in 0.002 seconds (files took 0.12101 seconds to load)
1 example, 0 failures