테스트 DSL에서 기대할 수 있는 Ruby 코드는 무엇입니까?
개발자로서 알아두면 흥미로울 수 있습니다. 어쩌면 너무 끔찍해서 직접 쓰는 것이 불가능할 수도 있습니다. 또는 미니테스트 테스트 세트보다 더 가벼울 수도 있습니다. 누가 알아?
RSpec과 minitest 간의 끝없는 논쟁을 피하면서 이 질문에 답하기 위해 이 게시물의 목적을 위해 RSpec clone 프로젝트를 사용하겠습니다.
RSpec 클론이란 무엇입니까?
정확성, 보안 및 표준화를 강조하는 RSpec의 최소한의 재구현입니다.
커뮤니티RSpec style guide에 설명된 지침 및 모범 사례를 적용하려는 욕구에 힘입어 이 RSpec 클론에는 대부분의 RSpec DSL이 포함되어 마법의 힘 없이 예상 결과를 표현합니다.
더 이상 고민하지 않고 프레임워크가 테스트를 빌드하고 실행하는 방법을 이해하기 위해 DSL 구문과 생성된 Ruby 코드 간의 몇 가지 대응 관계를 살펴보겠습니다. 읽기 쉽도록 이러한 매핑은 메서드별로 그룹화됩니다.
DSL에서 루비로
방법을 기술하십시오
내가 이것을 쓸 때,
RSpec.describe String do
end
이 코드가 생성될 것으로 예상합니다.
Class.new do
private
def described_class
String
end
end
컨텍스트 메서드
내가 이것을 쓸 때,
RSpec.context "when in a context" do
end
이 코드가 생성될 것으로 예상합니다.
Class.new do
end
주제 방법
내가 이것을 쓸 때,
RSpec.describe ".subject" do
subject do
"foo"
end
end
이 코드가 생성될 것으로 예상합니다.
Class.new do
private
def subject
"foo"
end
end
포함된 설명 방법
내가 이것을 쓸 때,
RSpec.describe ".describe" do
describe "embedded describe" do
end
end
이 코드가 생성될 것으로 예상합니다.
base = Class.new do
end
Class.new(base) do
end
let 메서드
내가 이것을 쓸 때,
RSpec.describe ".let" do
let(:answer_to_everything) { 41 + one }
let(:one) { 1 }
end
이 코드가 생성될 것으로 예상합니다.
Class.new do
private
def answer_to_everything
41 + one
end
def one
1
end
end
방법 전에
내가 이것을 쓸 때,
RSpec.describe ".before" do
before do
puts "hello"
end
end
이 코드가 생성될 것으로 예상합니다.
Class.new do
private
def initialize
puts "hello"
end
end
방법을 기대
내가 이것을 쓸 때,
RSpec.describe "#expect" do
it { expect(41.next).to be(42) }
end
이 코드가 생성될 것으로 예상합니다.
description = Class.new do
end
require "matchi/rspec"
require "r_spec/clone/expectation_target"
example = Class.new(description) { include Matchi::Helper }
sandbox = example.new
sandbox.instance_eval { ExpectationTarget::Value.new(41.next).to be(42) }
콘솔에서 다음 결과를 볼 수 있을 것으로 기대합니다.
Success: expected to be 42.
Ruby로 즐거운 테스트
you don't write tests이 아닌 한, 이러한 DSL 인터페이스를 사용하는 이점은 잠재적인 오류가 있는 사양 문서에 추가 논리를 도입하는 것을 제한하고, 알고리즘 복잡성이 낮은 우수한 Ruby 패턴을 사용하도록 장려하고, Ruby 코드를 더 짧고 더 많이 만드는 것입니다. (기계) 읽을 수 있습니다.
According to Adam Hawkins ,
Rspec is a testing DSL. MiniTest is ruby.
나는 둘 다 좋아하고, 당신도 RSpec clone을 좋아하기를 바랍니다.
Reference
이 문제에 관하여(테스트 DSL에서 기대할 수 있는 Ruby 코드는 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cyri_/what-ruby-code-to-expect-from-a-testing-dsl-4oe1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)