Tes Rspec berhasil di lingkungan pengembangan tetapi gagal di Circle CI. Saya tidak tahu, solusi dalam kasus ini.

Ini adalah kode uji dan kode kesalahan.

require 'rails_helper'
require 'webmock'

describe SuggestsController, type: :request do
  describe 'GET data by Ajax' do
    before do
      WebMock.stub_request(
        :get, "https://...........herokuapp.com...../api/suggests"
      ).with(
        headers: { 'Authorization' => 'Bearer api123' },
        query: hash_including({ :keyword => "ru", :max_num => "3" })
      ).to_return(
        body: ['ruby', 'ruby for women', 'ruby for men'].to_json,
        status: 200,
        headers: { 'Content-Type' => 'application/json' }
      )
    end

    it 'get response200' do
      get '/potepan/suggest'
      expect(response.status).to eq(200)
    end

    it 'Getting keyword "ru" you get 3 suggesting word ' do
      get '/potepan/suggest', params: { keyword: 'ru', max_num: 3 }
      expect(JSON.parse(response.body)).to eq ['ruby', 'ruby for women', 'ruby for men']
    end
  end
end

Ini adalah pengontrol

require 'httpclient'

class MyApp::SuggestsController < ApplicationController
  def suggest
    client = HTTPClient.new
    uri = Rails.application.credentials.api[:suggest_url]
    header = { "Authorization" => "Bearer #{Rails.application.credentials.api[:suggest_key]}" }
    query = {
      "keyword" => params[:keyword],
      "max_num" => params[:max_num],
    }
    response = client.get(uri, query, header)

    if response.status == 200
      render json: JSON.parse(response.body)
    else
      render json: [], status: response.status
    end
  end
end

Dan ini adalah kode kesalahan

masukkan deskripsi gambar di sini

Sesuai dengan kode kesalahan Circle CI tidak membaca mandat.yml.enc jadi saya menambahkan RAILS_MASTER_KEY: ${RAILS_MASTER_KEY} seperti itu di docker-compose.ci.yml

.......
    ports:
      - '3000:3000'
    environment:
      MYSQL_USERNAME: root
      MYSQL_PASSWORD: password
      MYSQL_HOST: mysql
      REDIS_URL: "redis://redis:6379"
      RAILS_MASTER_KEY: ${RAILS_MASTER_KEY}
    depends_on:
      - mysql
      - redis
    networks:
      - default
    command: bundle exec rails server -b 0.0.0.0

Tetapi gagal dan ketika saya menerapkan ini dengan menggunakan git push heroku, saya bisa mendapatkan saran kata. jadi berspekulasi bahwa dapatkan data kata yang disarankan oleh Ajax. ini adalah kode Jquery

jQuery(document).ready(function() {
  $('.form-control').autocomplete({
    source: function(request, response) {
      $.ajax({
        type: 'GET',
        url: '/MyApp/suggest',
        data: {
          keyword: request.term,
          max_num: 5
        },
        dataType: "json"
      }).then(
        function(data) {
          response(data);
        },
        function(xhr, ts, err) {
          alert('${xhr.status}ERROR: ');
          $('.form-control').off();
        }
      );
    },
    atutoFocus: true
  });
});
0
Itiro Wakuda 2 Juni 2020, 01:24

1 menjawab

Jawaban Terbaik

RAILS_MASTER_KEY harus ditambahkan ke variabel lingkungan proyek Anda melalui aplikasi webnya. Jika tidak, Anda harus menempelkannya langsung ke docker-compose.ci.yml yang tentunya tidak disarankan jika Anda melakukan ini ke repo.

RAILS_MASTER_KEY yang sebenarnya harus disimpan secara lokal dalam file master.key.

Dokumentasi yang relevan: https://circleci.com/docs/2.0/env-vars/#:~:text=In%20the%20CircleCI%20application%2C%20go,masukkan%20a%20name%20and %20nilai.

0
scilence 2 Juni 2020, 00:42