sinonのcalledWithExactlyで引数チェックする場合は、chai.expectよりsinon.assertが便利

Chai使ってると、sinonのテストもChaiのアサーション使いたくなりますよね。 dynamodbStub = sinon.stub(this, ‘request’) expect(dynamodbStub.call […]

広告ここから
広告ここまで

目次

    Chai使ってると、sinonのテストもChaiのアサーション使いたくなりますよね。

    dynamodbStub = sinon.stub(this, 'request')
    expect(dynamodbStub.calledWithExactly(
      'DynamoDB',
      'query',
      {
        TableName: 'Example-table',
        KeyConditionExpression: ' username = :username',
        ExpressionAttributeValues: {
          ':username': 'user_id'
        },
        ScanIndexForward: false,
        Limit: 1
      }
    )).to.be.equal(true)
    

    ただしこれだと、エラー結果が以下のようになってちょっとつらい。

      2) Example #test() test call params
          AssertionError: expected false to equal true
          + expected - actual
    
          -false
          +true
    

    sinon.assertを使う

    アサーションをsinonのものに変えてみます。

    sinon.assert.calledWithExactly(
      dynamodbStub,
      'DynamoDB',
      'query',
      {
        TableName: 'Example-table',
        KeyConditionExpression: ' username = :username',
        ExpressionAttributeValues: {
          ':username': 'user_id'
        },
        ScanIndexForward: false,
        Limit: 1
      }
    )
    

    calledWithExactlyで比較した結果が出るようになりました。

    AssertError: expected request to be called with exact arguments DynamoDB, query, {
      ExpressionAttributeValues: { :username: "user_id" },
      KeyConditionExpression: "username = :username",
      Limit: 1,
      ScanIndexForward: false,
      TableName: "Example-table"
    }
        request(DynamoDB, query, {
      ExpressionAttributeValues: { :username: "userId" },
      KeyConditionExpression: "username = :username",
      Limit: 1,
      ScanIndexForward: false,
      TableName: "example-table"
    })
    
    広告ここから
    広告ここまで
    Home
    Search
    Bookmark