aws-sdk-mock을 사용하여dynamo를 테스트하는 방법
지금까지dynamo 주위의 시험은 정식표를 보러 가는 것이 좋지 않고, 시험도 잘 쓰지 못해서, 시험 볼 때dynamoDB local을 준비하는 것이 매우 번거롭다...이렇게 많은 핑계를 대고 게으름을 피웠어요.aws-sdk-mock이라는 물건이 있어서 썼어요.
이번 시험에는ava를 썼어요.
테이블 컨텐트
이번 시위의 책상 위에 모임의 열쇠가 하나 있다.구조는 다음과 같다.
그리고 하고 싶은 일은 지정된 사용자 ID의 이름과 나이를 얻는 것이다.
user_id
name
age
1
yamada
18
2
suzuki
20
정식 공연의 코드
models/demo.js
const AWS = require("aws-sdk");
class Users {
constructor() {
this.table = "demo";
this.dynamodb = new AWS.DynamoDB.DocumentClient({
region: "ap-northeast-1"
});
}
getData(userId){
const params = {
TableName: this.table,
Key: {
id: userId
}
};
return new Promise((resolve, reject) => {
this.dynamodb.get(params, (err, data) => {
if (err) {
console.error(err);
return reject(err);
} else {
return resolve(data.Item);
}
});
});
}
}
테스트 코드
tests/user.test.js
const test = require("ava");
const aws = require("aws-sdk-mock");
const path = require("path");
const testUserId = "1";
const Users = require("../../models/demo");
let allUserObj = {};
aws.setSDK(path.resolve("node_modules/aws-sdk"));
test.serial("prepare aws-sdk-mock environment", t => {
aws.mock("DynamoDB.DocumentClient", "get", function(params, callback) {
callback(null, { Item: { user_id: params.Key.user_id, name:"yamada", age:18 } });
});
allUserObj = new Users();
t.pass();
});
test.serial("get user info", t => {
const ansData = {
user_id: "1",
name: "yamada",
age: 18
};
return allUserObj.getData(testUserId).then(data => {
t.is(ansData, data);
});
});
콜백의 두 번째 매개 변수 부분에 표에 임시로 저장된 데이터를 지정합니다.get뿐만 아니라 scan도 같은 요령이다.query도.scan과query에 관해서는 여러 Items의 내용을 넣어야 하기 때문에 좀 번거롭습니다...✔ models › demo › prepare aws-sdk-mock environment
✔ models › demo › get user info
무사히 통과했다.이로써 현지에서dynamo의 테스트를 진행할 수 있기 때문에 정식 경기표에 영향을 미칠 염려도 없고 사용료를 받을 염려도 없어 안심하고 테스트를 진행할 수 있다.
앞으로 시험은 더욱 적극적일 것이다.
참고 자료
Reference
이 문제에 관하여(aws-sdk-mock을 사용하여dynamo를 테스트하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/naoko_s/items/087c1fedc5ee70d26718텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)