rspec 結合テスト expected: "/" got: "/users/sign_in"

expected: "/" got: "/users/sign_in"

 

結合テスト実行時に”こんなエラーが出た”

 

" got: "/users/sign_in"なので、サインインページでログインがうまくいっていないと推察し、見に行くもわからず。。。

 

そこでログインができない理由を洗い出す。

・バグがあってログインができない

・テスト用のアカウントがデータベースに登録できていない

・行っているフォームが正しくない

 

テスト用のアカウントは登録できているのでクリア!

そこでフォームの見直しをし調べれてるの下記のサイトに辿り着きコード修正し、実行できました。

Rails でトークアプリの作成手順 #結合テストコード | hideo blog

     expect(current_path).to eq root_path
      expect(
        find(".user_nav").find(span).hover
      ). have_content("ログアウト")
      expect(page).to have_no_content("新規登録")
      expect(page).to have_no_content("ログイン")

↓上記コードを削除し、下記コードに変更しエラー解決しました。

 click_on("Log in")

if else文 ポイント付与サービスを考える

if else文 ポイント付与サービスを考える

 

ECサイトのポイント付与サービス】

"ポイントはx点です。"と出力したい。


購入金額が999円以下の場合、3%のポイント
購入金額が1000円以上の場合、5%のポイント

ただし誕生日の場合はポイントが5倍になります。
誕生日の場合はtrue, 誕生日でない場合はfalseで表します。
また、小数点以下をすべてのポイント計算が終わったあとに切り捨てる。

 

1.2〜6行目で999円以下と1000円以上のtrueの処理を行う。

2.そして、購入金額に対して0.03と0.05をけてpoint数を計算して代入。

3.誕生日の場合には5倍になるようpointに5をかけて、point.floorにて小数点以下を切り捨てる。

def calculate_points(amount, is_birthday)

if amount <= 999
point = point * 0.03
else
point = pont * 0.05
end

if is_birthday
point = point * 5
end
puts "ポイントは{point.floor}点です。" end

each入れ子構造

家具の名前と値段が入った配列の合計額を出力したいとき(each入れ子構造)

 

furniture_price = "table", [200, 250, 220, ["chair", [100, 120, 80]], ["sofa", [1200, 1500]]]

 

まずはじめに["table", [200, 250, 220]という値を取り出す。

そして、変数furnitureに代入。

その後、[200, 250, 220]という値を1つずつ取り出し、自己代入してsumを出力する。

①sum = 0

②sum = 0 + 200

③返り値としてsum = 200となる。

 

そして、2回めの処理として

① sum =  200から始まり、

② sum =  200 + 250

③sum  =  450となり、③回めも同様の処理をすると合計値が670となる。

よってこの処理はtableの合計金額は670円ですと出力されることになる。

この処理を後のchairとsofaでも繰り返し行う。

 

 

furniture_price = [["table", [200, 250, 220]], ["chair", [100, 120, 80]], ["sofa", [1200, 1500]]]

furniture_price.each do |fruit|
  sum = 0
  furniture[1].each do |price|
    sum += price
  end
  puts "#{furniture[0]}の合計金額は#{sum}円です"
end

if文をunless文へ書き換え

問題

if p + q > 0

 puts "計算結果は0より大きいです"

end

 

【自分の回答】

unless  p + q < 0

 puts "計算結果は0より大きいです"

end

 

しかし、これでは"不正解"

unless  p + q < 0 ←これにしてしまうとp + q = 0のときでも表示されてしまうため、いけない。

0以上のときでも表示させてあげる必要があるので、unless  p + q <= 0になる。

 

 

【全体の回答】

unless  p + q <= 0

 puts "計算結果は0より大きいです"

end