Шестото предизвикателство вече ви очаква. Примерните тестове както винаги можете да откриете тук, а въпросите си можете да задавате в тази тема.
Шесто предизвикателство
- Опитвам се да напиша следният тест: - it "raises ArgumentError if not initiated with an array" do expect(Polynomial.new("-3, -4, 1, 0, 6").to_s).to raise_error ArgumentError end- Методът ми - initializeзапочва с:- def initialize(coefficients) raise ArgumentError unless coefficients.instance_of? Array- Тестът обаче не минава: - 1) Polynomial raises ArgumentError if not initiated with an array Failure/Error: expect(Polynomial.new("-3, -4, 1, 0, 6").to_s).to raise_error ArgumentError: ArgumentError # ./challenge6.rb:3:in `initialize' # ./sample_spec_c6.rb:17:in `new' # ./sample_spec_c6.rb:17:in `block (2 levels) in <top (required)>'- Може ли малко помощ къде ми е грешката? - P.S. Преработих го и така работи, но все пак, ако имате нешо полезно да кажете по темата ще се радвам: - it "raises ArgumentError if not initiated with an array" do -> { Polynomial.new("-3, -4, 1, 0, 6").to_s }.should raise_error ArgumentError end
- @Александър, Предполагам, че това ти изглежда познато? :-) - Когато пишеш тест за нещо, което очакваш да хвърли изключение трябва да отложиш изпълняването на нещото, за да дадеш възможност на RSpec да хване изключението. - expect(Polynomial.new("-3, -4, 1, 0, 6").to_s).to raise_error ArgumentError- В горния код Ruby ще се опита да изпълни - Polynomial.new(...).to_sи да подаде резултата като аргумент на- expect. RSpec няма да хване нищо, ако се появи изключение.- expect { Polynomial.new("-3, -4, 1, 0, 6").to_s }.to raise_error ArgumentError- Тук - Polynomial.new(...).to_sе затворено в блок (ти си използвал ламбда, което върши същата работа) и няма да се изпълни веднага,- expectще вземе блока и ще изпълни- #callметода (който ще доведе до изпълняването на- Polynomial.new(...).to_s) очаквайки изключение. Това е.- EDIT: Ето тук, в - RSpec::Matchers::RaiseError#matches?може да се види следният код (от 20-ти ред надолу):- # КРЪЦ... begin given_proc.call rescue @expected_error => @actual_error @raised_expected_error = true @with_expected_message = verify_message # ...КРЪЦ
Трябва да сте влезли в системата, за да може да отговаряте на теми.
