From f0ec286024fac334e925f76162713bd31cff169f Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Mon, 30 Mar 2015 01:19:15 +0800 Subject: [PATCH] Update rspec --- github-2fa.md | 49 -------------------- rspec-controllers.md | 22 --------- rspec-rails.md | 105 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 71 deletions(-) delete mode 100644 github-2fa.md delete mode 100644 rspec-controllers.md create mode 100644 rspec-rails.md diff --git a/github-2fa.md b/github-2fa.md deleted file mode 100644 index 79ff21812..000000000 --- a/github-2fa.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: GitHub 2FA ---- - -### Prepare your phone -Install [Google Authenticator](https://en.wikipedia.org/wiki/Google_Authenticator). Works for iOS and Android. - -### Enable 2FA - -* Enable [2 factor authentication](https://github.com/settings/security) on the GitHub website (Settings → Security → Two Factor Authentication). -* Take a picture of the QR code using Google Authenticator. - -### Enable password caching -On your computer, [enable caching your GitHub HTTPS credentials](https://help.github.com/articles/caching-your-github-password-in-git/). This allows you to store your 2FA token and not get asked for it everytime. - -``` -git config --global credential.helper osxkeychain # OSX -git config --global credential.helper cache # Linux -``` - -### Use HTTPS on your repos -If your git repos still use SSH (`git@github.com:user/repo.git`), change them to use HTTPS (`https://github.com/user/repo.git`). [Info here](https://help.github.com/articles/which-remote-url-should-i-use/#cloning-with-https-recommended). - -``` -cd project -vim .git/config -``` - -### Generate an API key - -* [Generate an API key](https://github.com/settings/applications#personal-access-tokens) under "Personal Access Tokens". You'll use this as a password. -* Leave the scopes unchanged. (as long as there's *repo* + *public_repo*) - -### Git push -Push a repo. You'll be asked for a password. Use the token for the password. - -``` -$ git push -Username for 'https://github.com': rstacruz -Password for 'https://rstacruz@github.com': -``` - -### That's it! - -Further reading: - -* [Providing your 2FA Authentication Code](https://help.github.com/articles/providing-your-2fa-authentication-code/) (github.com) -* [Caching your GitHub password](https://help.github.com/articles/caching-your-github-password-in-git/) (github.com) -* [HTTPS remote URLs](https://help.github.com/articles/which-remote-url-should-i-use/) (github.com) diff --git a/rspec-controllers.md b/rspec-controllers.md deleted file mode 100644 index 188965b12..000000000 --- a/rspec-controllers.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Rspec-rails controllers -layout: default ---- - -```rb -describe MyController do - describe "POST update" do - it "works" do - post :update, { user: { name: "john" } } - - controller - controller.send ... - - response - expect(response).to be_success - expect(response).to have_http_status(200) - expect(response).to render_template("index") - end - end -end -``` diff --git a/rspec-rails.md b/rspec-rails.md new file mode 100644 index 000000000..263806bd0 --- /dev/null +++ b/rspec-rails.md @@ -0,0 +1,105 @@ +--- +title: Rspec-rails controllers +layout: default +--- + +### Models + +```rb +# spec/models/*.rb +decribe MyModel do +end +``` + +### Controllers + +```rb +# spec/controllers/*.rb +describe MyController do + describe "POST update" do + it "works" do + post :update, { user: { name: "john" } } + + controller + controller.send ... + + response + expect(response).to be_success + expect(response).to have_http_status(200) + expect(response).to render_template("index") + end + end +end +``` + +### Request + +```js +# spec/requests/*.rb +describe "home page" do + it "displays the user's username after successful login" do + user = User.create!(:username => "jdoe", :password => "secret") + + get "/login" + + assert_select "form.login" do + assert_select "input[name=?]", "username" + assert_select "input[name=?]", "password" + assert_select "input[type=?]", "submit" + end + + post "/login", username: "jdoe", password: "secret" + # capybara + expect(page).to have_selector(".header .username", :text => "jdoe") + end +end +``` + +### Routing + +```rb +# spec/routing/*.rb +describe "routing to profiles" do + it "routes /profile/:username to profile#show for username" do + expect(get: "/profiles/jsmith").to route_to( + controller: "profiles", + action: "show", + username: "jsmith" + ) + end + + it "does not expose a list of profiles" do + expect(get: "/profiles").not_to be_routable + end +end +``` + +### Helpers + +```rb +# spec/helpers/*.rb +describe EventsHelper do + describe "#link_to_event" do + it "displays the title, and formatted date" do + event = Event.new("Ruby Kaigi", Date.new(2010, 8, 27)) + + # helper is an instance of ActionView::Base configured with the + # EventsHelper and all of Rails' built-in helpers + expect(helper.link_to_event).to match /Ruby Kaigi, 27 Aug, 2010/ + end + end +end +``` + +### Matchers + +```rb +be_a_new(Widget) # new_record? +render_template("new") +render_template(partial: 'form', locals: {...}) +redirect_to(widgets_path) +route_to(..) +be_routable +have_http_status(500) +have_http_status(:created) +```