0

我一直在努力创建一个应该在运行任何 rspec 测试之前执行的登录功能。

我现在拥有的是:

def login
  post "/session", { "session[username]" => "bjones" }
end

在我的 spec_helper.rb 文件中

然后,我在 requests 目录中的一个 spec.rb 文件中有以下内容。

require 'spec_helper'

describe "Sessions" do
  describe "GET /dashboards" do

    login

    it "displays the dashboard" do
      get dashboard_path
      puts response.body
    end
  end
end

但是,当我尝试运行测试时,我得到:

undefined method `post' for #<Class:0x4f08828> (NoMethodError)

我对 Rails 很陌生,对测试和 rspec 完全陌生,所以也许我在这里缺少一些基本的东西。基本上,我要做的就是设置该会话变量,以便在运行测试时我将登录。也许不同的方法会更好?或者也许我需要将该登录功能放在不同的地方?

我遇到了这个很有用的答案,但它不适用于 rspec,所以我无法理解这样一个辅助函数的去向。

4

1 回答 1

0

尝试

let(:login) {
  post "/session", { "username" => "bjones" }.to_json
}

这可能需要修改为使用.to_json或不使用,具体取决于控制器接受的内容类型。

于 2015-07-10T18:33:59.737 回答