【问题标题】:How do I write this spec in MiniTest/shoulda syntax?如何用 MiniTest/should 语法编写此规范?
【发布时间】:2014-04-24 14:43:11
【问题描述】:

我想将这个规范翻译成 MiniTest。

describe User do
  subject { build(:user, provider: 'foo') }

  # don't validate presence of password when provider is present
  it do
    should_not validate_presence_of(:password)
  end
end

我试过这个。我收到undefined method 'should_not' for UserTest 的错误

class UserTest < ActiveSupport::TestCase
  def setup
    @user = build_stubbed(:user)
  end

  test "responds to name" do
    assert_respond_to @user, :name
  end

  should validate_presence_of(:password)

  test "do not validate presence of password when provider is present" do
    build_stubbed(:user, provider: 'foo')
    should_not validate_presence_of(:password)
  end
end

我想更改一项测试的上下文,其中受试者获得provider 属性,这应该禁用密码字段上的存在验证器。

这是完整的错误:

UserTest#test_presence_of_password:
NoMethodError: undefined method `should_not' for #<UserTest:0x007feaa82c1c68>
    test/models/user_test.rb:45:in `block in <class:UserTest>'

【问题讨论】:

  • 我认为should 匹配器是一个附加组件?假设您很乐意通过猴子修补 Object 来获取它们;您确定要首先使用 should-style 吗? RSpec 离开它是有原因的。
  • @DaveNewton 我正在使用 gem shoulda-matchers 并且效果很好。我只是不知道如何更改属性更改的单个测试的上下文。我在我的问题中添加了一行来解释这一点。
  • @DaveNewton 我认为我的问题令人困惑。我改变了它。我真的在问应该语法。

标签: ruby-on-rails ruby rspec minitest shoulda


【解决方案1】:

我发现更好的方法是恢复到旧的 MiniTest:

  test "uniqueness of email with a different provider" do
    email_user = create(:user, email: "foo@bar.com")
    facebook_user = build_stubbed(:facebook_user, email: "foo@bar.com")

    assert facebook_user.valid?, "should be valid with same email if provider is different"
  end

【讨论】:

    【解决方案2】:

    看看minitest-rails-shoulda gem。如果你使用它,我假设测试看起来像这样:

    describe User do
      subject { build_stubbed(:user) }
    
      it { must validate_presence_of(:password) }
    
      describe "when a provider is present" do
        subject { build_stubbed(:user, provider: 'foo') }
    
        it { wont validate_presence_of(:password) }      
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多