2010-06-01から1ヶ月間の記事一覧
Webmockを使って愉快な単体テストを書いたのですが、どうもエラーメッセージがおかしいです。 ※Webmockについての説明は↓を参照。ももんがさんいつもお世話になってます。 POST可能なRubyのNet::HTTP偽装テストライブラリWebMock+ - きたももんががきたん。 …
factory girlで多対多の関連を作る際にどうしてもうまくいかなくて困りました。 結果として以下のようにするとうまくいきました。 factories.rb Factory.define :image do |f| f.url {Factory.next(:image_url)} f.blog_article_id 1 f.training_data_regist…
railsでfixtureの代わりに使われるfactory girlを使おうとすると、以下のエラーが発生。 ArgumentError: wrong number of arguments (0 for 1) この原因はfactory girlでテストデータを作成しようとしているモデルクラスが引数0のinitializeメソッドを持って…
environment.rbに以下の行を追加すると時刻が日本時間になります。 config.time_zone = 'Tokyo' が、コレを追加した後でDBの中を見てみると、時刻がUTCのままではないか。つまり、DBに書き込んだ時刻が実際の時刻より9時間前の時刻になっている。 おかしいな…
※mechanizeのバージョンは1.0.0です。 ○問題 mechanizeでhtmlをparseすると文字化けすることがあります。 ○原因 ・mechanizeは内部的にnokogiriを使っている ・(おそらく)nokogiriはKconvを使って文字コードを変換している ・(おそらく)webから取得したH…
以下のようなテーブルを作ったところ、テーブルの総行数が1000行程度でもクエリの実行に数秒かかるようになってしまいました。 テーブル名:image カラム名: url name file #数百KB程度のデータが入る thumbnail↓の記事などを見て大きなデータを保存してい…
方法2.特異メソッドを定義する class Target def initialize @inner_target = InnerTarget.new end def foo open("http://yahoo.co.jp/") end end describe TestingTarget do before(:all) target = TestingTarget.new def target.foo return File.open("y…
ネットワークやDBにアクセスするコードは単体テスト時には実行したくないですよね。 そういうコードをテスト環境で切り替える方法はいくつかありますが、一番お手軽な方法はメソッドを上書きする方法です。 方法1.サブクラスでoverride class Target def f…
RSpec使い始めの頃にプライベート変数の値をどうやってテストするかで悩んだことがありました。 色々調べた結果、instance_evalを使えば↓のようにテストできると判明。 @test_obj.instance_eval("@field").should == 1 これは便利・・・だけど、このメソッド…
iPadでPDFを読んでいる時に高い解像度で保存したPDFだとページめくりに5秒ぐらいかかっていらっとすることがあります。 そんな場合はacrobat(acrobat readerは不可)を使ってPDFを圧縮しましょう。手順は以下。 1.acrobatのメニューの文書→OCRテキスト認識…
ブックスキャンのようなPDF化サービスを利用してファイル名変更サービスを利用しない場合、ファイル名が時刻になっているので自分で変更する必要があります。 その際に、ファイル名変更を効率化する方法を紹介します。 1.PDF-XChange Viewerをインストール…
mechanizeで目的のページのリンクを取得しているときに、どうしても取得できないリンクがありました。 agent.page.search("a").each do |link| ... end ↑のようにすべてのaタグを抜き出してもその中に目的のリンクがない。 agent.page.links.each do |link| …
最近mechanizeを使ってガリガリとスクレイピングをするコードを書いているわけですが、抜き出したいHTML要素のXPathを簡単に調べる方法があったのでご紹介。 XPathを実行する際のお勧めplugin - goinger的日記 ↑のサイトに書いてあるとおりなので読んでみて…
昨日紹介した問題は発生してからすぐに原因の見当がついた。 最近↓の本を読んだお陰です。プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)作者: 矢野啓介出版社/メーカー: 技術評論社発売日: 2010/02/18メディア: 単…
rubyは.NETに比べて文字コードの問題が起こりやすい気がします。 オープンソースに共通する問題かも知れませんが。 世界のいろんな人がいろんな文字コードを前提としてコードを書いてるからでしょうか。 mechanizeの単体テストである要素のinner_htmlを取得…
昨日紹介した方法で単体テストをする場合、以下のことに気をつける必要があります。 ・テスト用のHTMLファイルの文字コードはEUC-JPでなければいけない Shift-JISでもUTF8でもmechanizeがうまくパースしてくれません。 EUC-JP以外を使うとWebからHTMLを取得…
昨日の続き。 昨日のコードを書くと以下の現象が起こります。 ・リクエストがrewriteされる http://google.com/docs → http://localhost/docs のようにドメインがすべてlocalhostになる。 ・「BASE_DIRで指定したパス+/htdocs」がhttp://localhost/に対応付…
昨日の記事で紹介した方法で単体テストを行おうとしたけど、何故かmechanizeがうまくHTMLをパースしてくれない。 mechanizeのソースコードを読むとmechanize用の単体テストコード&ヘルパーがあった。 あ、このヘルパーを使わせてもらえばいいじゃん。 envir…
mechanizeはWebサイトのスクレイピングを行うライブラリなのでネットワークに依存しています。 ↓のサイトは自動単体テスト時にネットワーク経由でHTMLを取得するのではなく、ローカルのファイルから取得する方法を紹介しています。 「ローカルの HTML をサー…
今更ながらRSpecを本格的に使い始めました。↓の記事などを参考にしています。 Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編) 単体テストコードを書いていてよく問題になるのがDBやネットワークへの依存をどの…
railsでバッチ処理を書く場合、一番メジャーな手段はscript/runnerを使うことっぽいのでとりあえずこれを使ってみます。 他にもrufus-schedulerというgemもあるっぽい↓ rufus-scheduler という、ちょっとかわいそうな子 情報が少ないし、今回はパスしました。…
rubyのhttp://anemone.rubyforge.org/を使ってcrawlerを作成中にエラーに見舞われました。 Webからダウンロードした画像をMySQLに保存しようとしたら以下のメッセージが表示されました。 Mysql::Error: MySQL server has gone away 早速エラーメッセージで検…
6月から始まったプレミアムサービスを利用しようと思ったが、 先日申し込んだ200冊のスキャン依頼をキャンセルしないと依頼冊数が多くなりすぎる。 そこでブックスキャンにキャンセルを頼んでみたが、断られてしまった。。 また、ご依頼頂きましたものは、シ…
トップページで宣伝してないからあまり公にするとまずいのかも知れませんが、 またブックスキャンのサービスがひっそりと拡充しました。 プレミアム特典は以下 ・Amazonや楽天ブックスなどのあるゆるサービスから、管理番号をダンボールにマジックで記載する…