0

(Deviseを介して)認証を必要とするWebアプリケーションでアクションをテストしようとしています。特定のアクションはjavascriptを使用するため、このjsオプションを仕様に適用します。

scenario "User wants to fax a single document", js: true do
  reset_email
  @doc = @user.documents.create(FactoryGirl.attributes_for(:document))
  visit "/documents/#{@user.id}"

  click_on "send_document_#{@doc.id}"
  last_email.should eq(@doc)
end

コントローラは、電子メールのような方法でファックスを送信します。理由はわかりません。私はそれを書きませんでした。とにかく、この機能仕様の上部で(RspecでCapybaraを使用して)、私はを使用して認証します

before(:each) do
  # Signs in as an admin
  @company = FactoryGirl.create(:company)
  @subscription = FactoryGirl.create(:admin_subscription, company_id: @company.id)
  @user = FactoryGirl.create(:user, company_id: @company.id)
  login_as @user, scope: :user
end

ファイル内の他のすべての仕様(ログインも必要)は引き続き合格です。これは、JavaScriptに関係していると私は考えています。そのため、このjsオプションはFirefoxでブラウザを開き、ページは適切なコンテンツではありません。それは言う

500 Internal Server Error
  undefined method `status' for nil:NilClass

オンラインで検索したところ、responseまたはと呼ばれるコントローラーにアクションがないという応答のみが見つかりましactionた。安心してください、私にはそのような行動はありません。RESTfulアクションと2つの追加機能のみ:

def send_document
  @to = params[:to].gsub(/([() \-]+)/, '')
  #The below parses the number to format it for InterFax
  #It adds a "+1" to the front, and a dash in the middle 
  #of the number where needed.
  @to = "+1"+@to[0..-5]+"-"+@to[-4,4]
  @document = Document.find(params[:id])
  DocumentMailer.send_document(@to, @document).deliver
  render :template => false, :text => 'true'
end
def email_document
  @to = params[:to]
  @document = Document.find(params[:id])
  DocumentMailer.email_document(@to, @document).deliver
  render :template => false, :text => 'true'
end

誰かがこれらのエラーを理解するのを手伝ってもらえますか?このアプリケーションの多くはJavaScriptを使用しており、サインイン中にこれらのアクションをテストする方法が本当に必要です。

4

1 に答える 1

0

アクションが完了したことを最初にテストせずに、非 UI 条件をチェックする場合は注意してください。あなたがするとき:

  click_on "send_document_#{@doc.id}"
  last_email.should eq(@doc)

JavaScript はブラウザ インスタンス内で実行されていることに注意してください。これは、テスト コードと同じプロセスではありません。先に進む前に、ページの更新を確認すると役立つ場合があります。

  click_on "send_document_#{@doc.id}"
  page.should have_content("Email sent") # for example
  last_email.should eq(@doc)

カピバラは、ページ要素が表示されるのを待つことについてかなり賢いと主張しています - YMMV.

アプリでログインが必要な場合、要求仕様は通常のログイン プロセスを使用する必要があります。ログイン ページにアクセスし、資格情報を入力してから、テストするページに移動します。

于 2013-02-15T03:15:24.893 に答える