首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是一次好的笔试还是很难看?

这是一次好的笔试还是很难看?
EN

Stack Overflow用户
提问于 2017-03-09 06:08:59
回答 1查看 39关注 0票数 1
代码语言:javascript
复制
describe "Team::Membership" do
  let(:team) { Team.last }
  let(:user) { User.last }
  let(:membership) {user.apply_for(team)}

  it "can be rejected" do
    assert_difference "team.denied_applications.reload.count", +1 do
      assert_difference "team.applications.reload.count", -1 do
        assert_difference "team.members.reload.count", 0 do
          membership.reject!
        end
      end
    end
    membership.state.must_equal "denied"
  end

如果应用程序被拒绝,那么范围denied_applications会增加1,applications是-1,members根本不会改变。

代码语言:javascript
复制
# team.rb
  has_many :memberships, dependent: :destroy
  has_many :members, -> { where(team_memberships: {state: :confirmed}) }, through: :memberships, source: :user
  has_many :ex_members, -> { where(team_memberships: {state: :left}) }, through: :memberships, source: :user
  has_many :applications, -> { where(state: :pending) }, class_name: "Membership"
  has_many :denied_applications, -> { where(state: :denied) }, class_name: "Membership"

所以我的问题更有可能是:这是一个好的写作测试,还是你只需要写

代码语言:javascript
复制
team.denied_applications.reload.count.must_equal(1)
team.applications.reload.count.must_equal(0)
team.members.reload.count.must_equal(0)
EN

回答 1

Stack Overflow用户

发布于 2017-03-09 08:49:31

有些人会争辩说,不同的断言应该在不同的测试中,但是IMHO,在这种情况下不是问题。

在我看来最不理想的是,你打电话给

代码语言:javascript
复制
let(:team) { Team.last }
let(:user) { User.last }

为了确保您的测试不相互依赖或相互干扰,应该在测试运行期间清除数据库,因此如果这样做了,您可以编写如下内容:

代码语言:javascript
复制
let(:team) { Team.create }
let(:user) { User.create }

或者您可以使用像factory_girl这样的工具来更容易地创建记录,例如,如果您正在进行一些验证,并且不想在任何地方键入有效的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42687971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档