0

Ruby スクリプトで mysql2 を使用しています。これを使用して、mysql DB に対する API 応答をテストします

これは私のスクリプトのスニペットです

test_job_by_id_5
 id = $data["jobs"]["id"][i] # example 5
 job = JobServices.job_by_id(id)
 response = @@con.query("select * from jobs where id = #{id}") #select * from jobs where id =5
 rs=response.collect #this fails
 assert_match(job[0]['title'],rs[0]['title'],"The title values are equal for #{$data["jobs"]["id"][i]}")
end

だから私がこれを使うと、ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-darwin10]それは魅力のように機能します

しかし、使用するruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]と機能しません。このエラーが発生します

NoMethodError: undefined method '[]' for 
#<Enumerator: #<Mysql2::Result:0x00000012d19f18>:collect>

誰かがこれを修正するのを手伝ってもらえますか?

4

1 に答える 1

1

(つまり)を呼び出すとcollect、インスタンスが返されます。■ 配列アクセス演算子を実装していないため、有用なことを言うことも取得することもできません。ただし、含まれているため、応答するため、おそらくこれを実行する必要があります。EnumerableMysql2::ResultEnumeratorEnumeratorenumerator[0]EnumeratorEnumerablefirst

rs  = response.collect
row = rs.first
assert_match(job[0]['title'], row['title'], "The title values are equal for #{$data["jobs"]["id"][i]}")

Enumeratorまたは、を完全にスキップして、 を呼び出しfirstますresponse

row = response.first
assert_match(job[0]['title'], row['title'], "The title values are equal for #{$data["jobs"]["id"][i]}")

またはこれさえ:

row = @@con.query("select * from jobs where id = #{id}").first
assert_match(job[0]['title'], row['title'], "The title values are equal for #{$data["jobs"]["id"][i]}")

クエリで何も見つからない場合は trueになることに注意してくださいrow.nil?。例外が必要ない場合は、それを考慮する必要があります。

于 2012-05-01T22:52:54.973 に答える