ruby-on-rails - rspec 模型的未定义方法 stub

标签 ruby-on-rails rspec

在我的新 Rails 应用程序中,我添加了一个带有脚手架的用户模型 rails gscaffold 用户名电子邮件

它生成了一堆失败的测试。其中之一是:

require 'spec_helper'

describe "users/new" do
  before(:each) do
    assign(:user, stub_model(User,
      :name => "MyString",
      :email => "MyString"
    ).as_new_record)
  end

  it "renders new user form" do
    render

    assert_select "form[action=?][method=?]", users_path, "post" do
      assert_select "input#user_name[name=?]", "user[name]"
      assert_select "input#user_email[name=?]", "user[email]"
    end
  end
end

我的spec_helper.rb是:

require 'rubygems'
require 'spork'
require 'capybara/rspec'

Spork.prefork do

end

Spork.each_run do

end

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.mock_with :mocha
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"
end

但我收到错误:

  2) users/new renders new user form
     Failure/Error: assign(:user, stub_model(User, NoMethodError:
       undefined method `stub' for #<User:0x57f0558>
     # ./spec/views/users/new.html.haml_spec.rb:5:in `block (2 levels) in <top (
required)>'

发生什么事了?

最佳答案

问题在于您的RSpec.configure block 指定了config.mock_with :mocha,并且生成的脚手架代码stub_model与mocha(它使用 stubs 而不是 RSpec 代码中的 stub)。

一种选择是使用 gem,例如 rspec-rails-mochastub_model 移植到 mocha;另一种是使用 RSpec 而不是 mocha 进行模拟。

关于ruby-on-rails - rspec 模型的未定义方法 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15779257/

相关文章:

ruby-on-rails - ambethia 在 Rails 3 上的 reCAPTCHA 插件。覆盖 flash 消息 div 默认值?

sql-server - sqlserver rake db 连接错误 :migrate

ruby - 我如何测试我的 Ruby 代码在捕获符号时做了什么? (R规范)

ruby-on-rails - 仅在集成测试中使用 rspec

angularjs - Capybara-Poltergeist Angular modulerr 在 Linux 上

ruby-on-rails - RSpec: `initialize':致命:用户密码验证失败

javascript - 基于当前所选选项卡的动态导航栏突出显示

ruby-on-rails - 在不更改 URL 的情况下呈现另一个 Action?

ruby-on-rails - 如何将参数传递给 Rails 3 表单中的 hidden_​​field_tag?

ruby-on-rails - rails rspec -(第二次测试)预期响应为 < :redirect>, 但为 <200>