質問編集履歴

4

追記

2021/07/04 16:39

投稿

hitosi0317
hitosi0317

スコア1

test CHANGED
File without changes
test CHANGED
@@ -266,7 +266,9 @@
266
266
 
267
267
 
268
268
 
269
- 追記
269
+ **追記**
270
+
271
+ ---
270
272
 
271
273
 
272
274
 

3

追記

2021/07/04 16:39

投稿

hitosi0317
hitosi0317

スコア1

test CHANGED
File without changes
test CHANGED
@@ -268,6 +268,118 @@
268
268
 
269
269
  追記
270
270
 
271
+
272
+
273
+ javascript/packs/checked.js
274
+
275
+ ```javascript
276
+
277
+ function check() {
278
+
279
+ const plans = document.querySelectorAll(".plan");
280
+
281
+ plans.forEach(function (plan) {
282
+
283
+ if (plan.getAttribute("data-load") != null) {
284
+
285
+ return null;
286
+
287
+ }
288
+
289
+ plan.setAttribute("data-load", "true");
290
+
291
+ plan.addEventListener("click", () => {
292
+
293
+ const planId = plan.getAttribute("data-id");
294
+
295
+ const XHR = new XMLHttpRequest();
296
+
297
+ XHR.open("GET", `/motion/${planId}`, true);
298
+
299
+ XHR.responseType = "json";
300
+
301
+ XHR.send();
302
+
303
+ XHR.onload = () => {
304
+
305
+ if(XHR.status != 200) {
306
+
307
+ alert(`Error ${XHR.status}: ${XHR.statusText}`);
308
+
309
+ return null;
310
+
311
+ }
312
+
313
+ const item = XHR.response.plan;
314
+
315
+ if (item.checked === true) {
316
+
317
+ plan.setAttribute("data-check", "true");
318
+
319
+ } else if (item.checked === false) {
320
+
321
+ plan.removeAttribute("data-check");
322
+
323
+ }
324
+
325
+ };
326
+
327
+ });
328
+
329
+ });
330
+
331
+ }
332
+
333
+ setInterval(check, 1000);
334
+
335
+ ```
336
+
337
+ javascript/stylesheets/application.scss
338
+
339
+ ```css
340
+
341
+ @import "bootstrap";
342
+
343
+
344
+
345
+
346
+
347
+ div[data-check="true"] {
348
+
349
+ background-color: red;
350
+
351
+ }
352
+
353
+
354
+
355
+
356
+
357
+ .top-image{
358
+
359
+ background: url(https://publicdomainq.net/images/202106/05s/publicdomainq-0055890rbu.jpg);
360
+
361
+ background-size: cover;
362
+
363
+ }
364
+
365
+
366
+
367
+
368
+
369
+ a,li{
370
+
371
+ color: black;
372
+
373
+ text-decoration: black;
374
+
375
+ list-style: none;
376
+
377
+ }
378
+
379
+ ```
380
+
381
+
382
+
271
383
  page.all('.plan')[0].matches_style?( 'background-color' => 'rgb(255, 0, 0)' )
272
384
 
273
385
  page.all('.plan')[0].matches_style?( 'background-color' => 'red' )

2

追記

2021/07/04 16:37

投稿

hitosi0317
hitosi0317

スコア1

test CHANGED
File without changes
test CHANGED
@@ -263,3 +263,13 @@
263
263
  最後のCSSが適用されているかどうかの確認を表現したいんですが、これがうまいこといかない。
264
264
 
265
265
  わかる方がいらっしゃいましたらお力添えお願いたします.
266
+
267
+
268
+
269
+ 追記
270
+
271
+ page.all('.plan')[0].matches_style?( 'background-color' => 'rgb(255, 0, 0)' )
272
+
273
+ page.all('.plan')[0].matches_style?( 'background-color' => 'red' )
274
+
275
+ このような指定の仕方をするとCSSが適用されていてもfalseを返されてしまう。

1

rspec クリック 背景色変化 具体的質問

2021/07/04 16:22

投稿

hitosi0317
hitosi0317

スコア1

test CHANGED
@@ -1 +1 @@
1
- railsのRspecの結合テストコードで要素をクリックするCSSが適用するコードたい
1
+ railsのRspecの結合テストコードで要素をクリックした時に背景色が変化したことを真偽値で表現でるのか?
test CHANGED
@@ -1 +1,265 @@
1
+ **実現したいこと**
2
+
3
+ ---
4
+
5
+ railsの結合テストコードで要素をクリックした時に背景色が変化したことを真偽値で表現したい。
6
+
7
+
8
+
9
+ **詰まっている問題**
10
+
11
+ ---
12
+
1
- これから要素をクリックするとCSSが適用されるコードを書こと思っいるが、Google検索などを用い色々と参考サイトを探しているんですが全く見つりまん。参考にるよなサイトがありしたら教えてただけるありがたです。
13
+ 現在結合テストコードで要素をクリックするところまでは,行けたんですがクリックした時にCSSが適用されていかどかの確認ができおりませ。要素の内容を確認る(Capybara::Node::Matcher)検索メソッドなどを一通り確認ししているんですがうまいこと行ないです。組み合わの問題のかスペルミスでうまいといっていないのか?
14
+
15
+
16
+
17
+ (例)こんな感じで試しました。
18
+
19
+ ![イメージ説明](2e164a6c8b13e14211a066af275ab77e.png)
20
+
21
+
22
+
23
+
24
+
25
+ **実際のページ**
26
+
27
+ ---
28
+
29
+ 画像: ブロックをクリックするとCSSが適用される.
30
+
31
+ ![![イメージ説明](f9357f252454d2cb6408fd1ecf6cce90.png)
32
+
33
+
34
+
35
+ **実際のコード**
36
+
37
+ ---
38
+
39
+ views/motions/index.html.erb
40
+
41
+ ```Ruby
42
+
43
+ <div class="plan-image">
44
+
45
+ <div class="container text-center ">
46
+
47
+ <%if user_signed_in? %>
48
+
49
+ <% if @motion != nil && current_user.motion != [] && current_user.motion.last.created_at.strftime("%Y%m%d") == @now.strftime("%Y%m%d")%>
50
+
51
+ <h1 class="text-center">本日の予定</h1>
52
+
53
+ <div class="row g-5">
54
+
55
+ <div class="border p-3 col-lg-6 col-sm-12">
56
+
57
+ <h2 class="center"><%= current_user.nickname%>さんの本日の時間割</h2>
58
+
59
+ <div class="plan border fs-2 py-3 w-75 mx-auto" data-id=<%= current_user.motion.last.id %> data-check=<%= current_user.motion.last.checked %>>
60
+
61
+ <% if current_user.motion.last.plans1.present?%>
62
+
63
+ <%= current_user.motion.last.plans1 %>
64
+
65
+ <%= current_user.motion.last.count1.strftime('%H:%M') %>
66
+
67
+ </div>
68
+
69
+ <% end %>
70
+
71
+ <% if current_user.motion.last.plans2.present?%>
72
+
73
+ <div class="plan border fs-2 py-3 w-75 mx-auto" data-id=<%= current_user.motion.last.id %> data-check=<%= current_user.motion.last.checked %>>
74
+
75
+ <%= current_user.motion.last.plans2 %>
76
+
77
+ <%= current_user.motion.last.count2.strftime('%H:%M') %>
78
+
79
+ </div>
80
+
81
+ <% end%>
82
+
83
+ <% if current_user.motion.last.plans3.present?%>
84
+
85
+ <div class="plan border fs-2 py-3 w-75 mx-auto" data-id=<%= current_user.motion.last.id %> data-check=<%= current_user.motion.last.checked %>>
86
+
87
+ <%= current_user.motion.last.plans3 %>
88
+
89
+ <%= current_user.motion.last.count3.strftime('%H:%M') %>
90
+
91
+ </div>
92
+
93
+ <% end %>
94
+
95
+ <% if current_user.motion.last.plans4.present?%>
96
+
97
+ <div class="plan border fs-2 py-3 w-75 mx-auto" data-id=<%= current_user.motion.last.id %> data-check=<%= current_user.motion.last.checked %>>
98
+
99
+ <%= current_user.motion.last.plans4 %>
100
+
101
+ <%= current_user.motion.last.count4.strftime('%H:%M')%>
102
+
103
+ </div>
104
+
105
+ <% end %>
106
+
107
+ <% if current_user.motion.last.plans5.present?%>
108
+
109
+ <div class="plan border fs-2 py-3 w-75 mx-auto" data-id=<%= current_user.motion.last.id %> data-check=<%= current_user.motion.last.checked %>>
110
+
111
+ <%= current_user.motion.last.plans5 %>
112
+
113
+ <%= current_user.motion.last.count5.strftime('%H:%M') %>
114
+
115
+ </div>
116
+
117
+ <% end %>
118
+
119
+ <h2 class="center">メモ<h2>
120
+
121
+ <div class="border w-75 mx-auto p-3" , style="word-wrap: break-word;">
122
+
123
+ <p><%= current_user.motion.last.memo %></p>
124
+
125
+ </div>
126
+
127
+ </div>
128
+
129
+ ```
130
+
131
+ spec/factories/motions.rb
132
+
133
+ ```rspec
134
+
135
+ FactoryBot.define do
136
+
137
+ factory :motion do
138
+
139
+ weight { '33' }
140
+
141
+ plans1 { '学習' }
142
+
143
+ plans2 { '学習' }
144
+
145
+ plans3 { '学習' }
146
+
147
+ plans4 { '学習' }
148
+
149
+ plans5 { '学習' }
150
+
151
+ count1 { '15:30' }
152
+
153
+ count2 { '16:30' }
154
+
155
+ count3 { '17:30' }
156
+
157
+ count4 { '18:30' }
158
+
159
+ count5 { '19:30' }
160
+
161
+ memo { 'テスト確認します' }
162
+
163
+ association :user
164
+
165
+ end
166
+
167
+ end
168
+
169
+ ```
170
+
171
+ spec/system/motions_spec.rb
172
+
173
+ ```ここに言語を入力
174
+
175
+ RSpec.describe '予定完了機能', type: :system, js: true do
176
+
177
+ before do
178
+
179
+ @user = FactoryBot.create(:user)
180
+
181
+ @motion = FactoryBot.build(:motion)
182
+
183
+ end
184
+
185
+
186
+
187
+ context '予定完了作成' do
188
+
189
+ it '予定をクリックするとCSSが適用される' do
190
+
191
+ # サインする
192
+
193
+ sign_in(@user)
194
+
195
+ # 予定作成ページへのボタンがあることを確認する
196
+
197
+ expect(page).to have_link('本日の予定を設定する')
198
+
199
+ # 予定作成ページへ移動する
200
+
201
+ visit new_motion_path
202
+
203
+ # フォームに値を入力する
204
+
205
+ fill_in 'motion_weight', with: @motion.weight
206
+
207
+ fill_in 'motion_plans1', with: @motion.plans1
208
+
209
+ fill_in 'motion_count1', with: @motion.count1
210
+
211
+ fill_in 'motion_plans2', with: @motion.plans2
212
+
213
+ fill_in 'motion_count2', with: @motion.count2
214
+
215
+ fill_in 'motion_plans3', with: @motion.plans3
216
+
217
+ fill_in 'motion_count3', with: @motion.count3
218
+
219
+ fill_in 'motion_plans4', with: @motion.plans4
220
+
221
+ fill_in 'motion_count4', with: @motion.count4
222
+
223
+ fill_in 'motion_plans5', with: @motion.plans5
224
+
225
+ fill_in 'motion_count5', with: @motion.count5
226
+
227
+ fill_in 'motion_memo', with: @motion.memo
228
+
229
+ # 送信するとmotionモデルのカウントが1上がることを確認する
230
+
231
+ expect do
232
+
233
+ find('input[name="commit"]').click
234
+
235
+ end.to change { Motion.count }.by(1)
236
+
237
+ # トップページに遷移することを確認する
238
+
239
+ expect(current_path).to eq(root_path)
240
+
241
+ # 予定をクリックする
242
+
243
+ binding.pry
244
+
245
+ page.all('.plan')[0].click
246
+
247
+ page.all('.plan')[1].click
248
+
249
+ page.all('.plan')[2].click
250
+
251
+ page.all('.plan')[3].click
252
+
253
+ page.all('.plan')[4].click
254
+
255
+ # CSSが適用されたことを確認する
256
+
257
+ end
258
+
259
+ end
260
+
261
+ ```
262
+
263
+ 最後のCSSが適用されているかどうかの確認を表現したいんですが、これがうまいこといかない。
264
+
265
+ わかる方がいらっしゃいましたらお力添えお願いたします.