Интеграционное тестирование встроенного приложения Shopify с использованием узла - PullRequest
0 голосов
/ 06 мая 2020

Я завершил учебник «Создание приложения Shopify с помощью Node и React», ссылка на который приведена ниже. https://shopify.dev/tutorials/build-a-shopify-app-with-node-and-react/embed-your-app-in-shopify

В настоящее время приложение успешно встраивается, как ожидалось. Теперь я хотел бы написать интеграционный тест, чтобы убедиться, что так будет и дальше, пока я разрабатываю свое приложение Shopify.

Я бы хотел протестировать следующие вещи:

  • Ответ на запрос получения: 200
  • Shopify аутентифицирует запрос с помощью конфигурации
  • Shopify проверяет запрос
  • Далее JS обрабатывает запрос

С тестом ниже я продолжаю получать 404 кода статуса в ответе. Не мог бы кто-нибудь сказать мне, как go о написании этого теста?

Вот мой тест на данный момент.

//tests/server/server.js
import request from 'supertest'
import { server } from "server";

test("ensure Shopify authenticates and response with 200", async () => {
  const response = await request(server.callback()).get('/auth').set('shop', 'farmers-market-development.myshopify.com').set('accessToken', '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')
  expect(response.status).toEqual(200)
  server.close()
});

Мой код для сервера. js файл идентичен руководству, за исключением того, что я экспортирую сервер в конце (так Я могу импортировать его в свой тест).

//server.js
require("isomorphic-fetch");
const dotenv = require("dotenv");
const Koa = require("koa");
const next = require("next");
const { default: createShopifyAuth } = require("@shopify/koa-shopify-auth");
const { verifyRequest } = require("@shopify/koa-shopify-auth");
const session = require("koa-session");

dotenv.config();

const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const server = new Koa();
const handle = app.getRequestHandler();

const { SHOPIFY_API_SECRET_KEY, SHOPIFY_API_KEY } = process.env;

app.prepare().then(() => {
  server.use(session({ secure: true, sameSite: "none" }, server));
  server.keys = [SHOPIFY_API_SECRET_KEY];
  // Expect this to have been called once
  server.use(
    createShopifyAuth({
      apiKey: SHOPIFY_API_KEY,
      secret: SHOPIFY_API_SECRET_KEY,
      scopes: ["read_products"],
      afterAuth(ctx) {
        // make sure that the shop and accessToken are part of the ctx

        const { shop, accessToken } = ctx.session;
        ctx.redirect("/");
      },
    })
  );

  // Expect this to have been called once
  server.use(verifyRequest());

  // Expect 200 status code and possibly some content
  server.use(async (ctx) => {
    await handle(ctx.req, ctx.res);
    ctx.respond = false;
    ctx.res.statusCode = 200;
    return;
  });

  server.listen(port, () => {
    console.log(`> Ready on http://localhost:${port}`);
  });
});

module.exports = {
  server
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...