RSpec nie działa?

Witam,

Mam dość chyba błahy problem. Mam sobie test powiedzmy taki:

it { should validate_presence_of :firstname }

A w modelu zwykła walidacja:

validates :firstname, presence: true

A test jak nie przechodził tak nie przechodzi, a wszystko jak na moje oko jest poprawnie, aczkolwiek mogę być w błędzie, jedyne co mi już przychodzi do głowy to to, że testy jakoś nie chcą współpracować z Ubuntu…
Jakby ktoś wiedział o co może chodzić, to było by bardzo fajnie :smiley:

taskie coś przypomina mi shoulda, patrz: https://github.com/thoughtbot/shoulda

Mógłbyś jakoś rozwinąć myśl? Oprócz tego, że w :firstname nie jest w nawiasach nie wiedzę żadnych innych różnic w składni.

składnia rspeca wyglada tak:

it 'opis' do
  ...
end

teoretycznie niby ruby pozwala zamieniać do … end na { … } ale takiej składni w czystym rspecu jeszcze nie widziałem, ale pomijając ten szczegół to nie ma tego opisu testy w tym co podałeś.

Aaa… to wiem, po prostu nie podałem całego testu, bez opisu, bo uznałem to za niepotrzebne :wink: Mam całą składnię tak jak być powinna z opisem. Test wygląda tak jak ten podany w dokumentacji i jakoś nie działa, nie wiem dlaczego, nie wiem czy to wina systemu czy czego, że testy niby dobrze napisane, a nie chcą działać.

umiejętności telepatii jeszcze nie opanowałem

a tak na serio to podaj wszystko bez wycinanie czegoś, bo wycinasz rzeczy które twoim zdaniem (błędnym), są niby nie potrzebne i skąd ludzie mają wiedzieć co jest u ciebie nie tak. Dodatkowo co znaczy “nie działa”, co za błąd dostajesz, o tym też zero informacji.

To jest jak najbardziej normalna i poprawna składnia rspeca. Rspec pozwala na skrócone zapisy w postaci is_expected.to/should:

require "pry"

RSpec.describe "Array" do
  subject { Array.new }

  # poniższe zapisy są równoważne
  it { should be_empty }
  it { is_expected.to be_empty }

  it "is empty" do
    expect(subject).to be_empty
  end
end
$ rspec array_spec.rb
..

Finished in 0.00332 seconds (files took 0.1133 seconds to load)
2 examples, 0 failures

Więc na stronie: https://www.relishapp.com/rspec/rspec-core/docs/subject/one-liner-syntax

Co do shoulda - jest to meta gem o 2 zależnościach: shoulda-context i shoulda-matchers. Ten pierwszy nie dotyczy rspeca. Ten drugi dodaje po kilka matcherów (np. validates_presence_of, pełna lista w README: https://github.com/thoughtbot/shoulda-matchers).

w takim razie mój błąd, jednak bez informacji o błędzie niewiele można pomóc

Ale nie ma błędu, a raczej nie ma nic co by było błędem składni czy innym tego typu, po prostu test nie przechodzi jakby nie było walidacji w modelu, a walidacja jest. Dlatego raczej mi chodzi o to czy czegoś nie trzeba jakoś jeszcze specjalnie skonfigurować pod te testy, bo teoretycznie powinien test bez problemu przejść.

Bantu zacznij proszę od przeczytania tego: http://stackoverflow.com/help/how-to-ask
Jeśli chcesz na prawdę nauczyć się programować (nie wiem czy ruby to Twój pierwszy język) to umiejętne opisywanie problemów jest wręcz musem.

No ale co tu opisywać? Mam test taki:

describe User do
  it { should validate_presence_of :firstname }
end

Czyli po mojemu potrzebuje walidację w modelu, więc mu ją tam dają tak jak napisałem w pierwszym poście.
Następnie odpalam test, a tam dostaję komunikat o tym, że nie ma tej walidacji i test nie przechodzi, a chyba wszystko poprawnie jest, bo nie wiem gdzie może być błąd, gdyby była jakaś literówka to by wywaliło error, że nie ma takiej metody, a wszystko przechodzi poprawnie, tylko jakimś dziwnym cudem test nie chce przejść i nie wiem od czego to jeszcze może być zależne. Inaczej na prawdę nie potrafię tego problemu opisać, dziwny problem i nie wiem co może być przyczyną, bo jasnego i konkretnego błędu w kodzie nie ma.

Czy odpalasz konkretny spec czy wszystkie? Wklej komendę jaką odpalasz testy. Wklej to co wypluwa odpalenie. Przecież komunikat błędu nie mówi “nie masz walidacji”. Być może wywala się test zupełnie inny niż myślisz. Możliwości jest wiele.

Wkurzyłem się i wygenerowałem na nowo pliki rspeca i teraz testy przechodzą bez problemu, Wygląda na to, że jakimś cudem albo ze starej wersji pliki instalacyjne się wygenerowały, albo sam nie wiem co, ale teraz wszystko śmiga. W każdym bądź razie dzięki wam chłopaki za chęć pomocy i zmuszenie mnie do dokładnego prześledzenia co się dzieje w moim kodzie :wink:

Cieszę się, że udało Ci się rozwiązać problem. Szkoda jednak, że nie doszliśmy do źródła problemu - wtedy nauczyłbyś się czegoś nowego. Temat umiejętnego przedstawiania problemów jest otwarty ;-).