如何解决 sinonJS 存根?
How to resolve sinonJS stub?
所以我正在尝试使用 SinonJS 存根请求。
在每次测试之前,它应该使用已解析的假信息来模拟请求,但它似乎没有按预期工作。尝试用 Promise.resolve
解决,但它也没有像我预期的那样工作。
测试代码如下:
describe("Store | Users actions", () => {
let commit = null;
let page = 1;
let itemsPerPage = 2;
const users_response = {
status: 200,
data: [{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz"
},
{
"id": 2,
"name": "Ervin Howell",
"username": "Antonette",
"email": "Shanna@melissa.tv"
}]
};
beforeEach(() => {
commit = sinon.spy();
sinon
.stub(api.users, "list").resolves();
});
afterEach(() => {
api.users.list.restore();
});
it("should list users", () => {
users.actions.list({ commit }, { page, itemsPerPage });
expect(commit).to.have.been.calledWith("UNSET_ERROR");
expect(commit).to.have.been.calledWith("GET_PAGINATED", users_response);
});
});
这是我遇到的错误:
1) Store | Users actions
should list users:
AssertionError: expected spy to have been called with arguments GET_PAGINATED, {
data: [{ email: "Sincere@april.biz", id: 1, name: "Leanne Graham", username: "Bret" }, { email: "Shanna@melissa.tv", id: 2, name: "Ervin Howell", username: "Antonette" }],
status: 200
}
"UNSET_ERROR" "GET_PAGINATED"
{
data: [{ email: "Sincere@april.biz", id: 1, name: "Leanne Graham", username: "Bret" }, { email: "Shanna@melissa.tv", id: 2, name: "Ervin Howell", username: "Antonette" }],
status: 200
}
at Context.<anonymous> (dist/js/webpack:/tests/unit/store/users.spec.js:184:1)
list({ commit }, { page, itemsPerPage, sort, search }) {
commit("UNSET_ERROR");
return api.users
.list(page, itemsPerPage, sort, search)
.then((users) => commit("GET_PAGINATED", users.data))
.catch((error) => commit("SET_ERROR", error));
}
我在这里做错了什么?非常感谢任何帮助。
编辑:添加列表功能
那是因为你的第二个提交函数调用是在 Promise then 方法中。
您需要等待 users.actions.list()。
例如:
beforeEach(() => {
commit = sinon.spy();
// Note: add users_response here.
sinon.stub(api.users, "list").resolves(users_response);
});
// Use async here.
it("should list users", async () => {
// Use await here.
await users.actions.list({ commit }, { page, itemsPerPage });
expect(commit).to.have.been.calledWith("UNSET_ERROR");
// Note: expect with property data, because called with: users.data.
expect(commit).to.have.been.calledWith("GET_PAGINATED", users_response.data);
});
所以我正在尝试使用 SinonJS 存根请求。
在每次测试之前,它应该使用已解析的假信息来模拟请求,但它似乎没有按预期工作。尝试用 Promise.resolve
解决,但它也没有像我预期的那样工作。
测试代码如下:
describe("Store | Users actions", () => {
let commit = null;
let page = 1;
let itemsPerPage = 2;
const users_response = {
status: 200,
data: [{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz"
},
{
"id": 2,
"name": "Ervin Howell",
"username": "Antonette",
"email": "Shanna@melissa.tv"
}]
};
beforeEach(() => {
commit = sinon.spy();
sinon
.stub(api.users, "list").resolves();
});
afterEach(() => {
api.users.list.restore();
});
it("should list users", () => {
users.actions.list({ commit }, { page, itemsPerPage });
expect(commit).to.have.been.calledWith("UNSET_ERROR");
expect(commit).to.have.been.calledWith("GET_PAGINATED", users_response);
});
});
这是我遇到的错误:
1) Store | Users actions
should list users:
AssertionError: expected spy to have been called with arguments GET_PAGINATED, {
data: [{ email: "Sincere@april.biz", id: 1, name: "Leanne Graham", username: "Bret" }, { email: "Shanna@melissa.tv", id: 2, name: "Ervin Howell", username: "Antonette" }],
status: 200
}
"UNSET_ERROR" "GET_PAGINATED"
{
data: [{ email: "Sincere@april.biz", id: 1, name: "Leanne Graham", username: "Bret" }, { email: "Shanna@melissa.tv", id: 2, name: "Ervin Howell", username: "Antonette" }],
status: 200
}
at Context.<anonymous> (dist/js/webpack:/tests/unit/store/users.spec.js:184:1)
list({ commit }, { page, itemsPerPage, sort, search }) {
commit("UNSET_ERROR");
return api.users
.list(page, itemsPerPage, sort, search)
.then((users) => commit("GET_PAGINATED", users.data))
.catch((error) => commit("SET_ERROR", error));
}
我在这里做错了什么?非常感谢任何帮助。
编辑:添加列表功能
那是因为你的第二个提交函数调用是在 Promise then 方法中。
您需要等待 users.actions.list()。
例如:
beforeEach(() => {
commit = sinon.spy();
// Note: add users_response here.
sinon.stub(api.users, "list").resolves(users_response);
});
// Use async here.
it("should list users", async () => {
// Use await here.
await users.actions.list({ commit }, { page, itemsPerPage });
expect(commit).to.have.been.calledWith("UNSET_ERROR");
// Note: expect with property data, because called with: users.data.
expect(commit).to.have.been.calledWith("GET_PAGINATED", users_response.data);
});